문제 개요
문자열 s가 hh:mm 형식의 시간을 나타낸다고 가정해 봅시다. 이 문자열에는 일부 숫자가 물음표(?)로 표시되어 숨겨져 있습니다. 24시간제를 기준으로 유효한 시간 범위는 00:00부터 23:59까지이며, 우리의 목표는 숨겨진 자리를 적절한 숫자로 대체하여 만들 수 있는 가장 늦은 유효 시간을 찾는 것입니다.
예를 들어 입력이 s = "1?:?5"라고 한다면 출력은 13:55가 됩니다. 시간 부분의 첫 자리는 이미 '1'로 확정되어 있고 두 번째 자리는 최대 '3'까지 허용되므로 13이 되며, 분 부분에서는 숨겨진 자리가 최대 '5'로 대체되고 마지막 자리의 '5'는 그대로 유지되어 55가 되기 때문입니다.
풀이 접근 방법
이 문제는 다음 단계를 통해 해결할 수 있습니다.
- 결과를 저장할 새 리스트 ans를 생성합니다.
- 가장 늦은 시간의 템플릿인 max_time := ['2','3',':','5','9'], 즉 23:59를 정의합니다.
- 만약 max_time[0] < '2'라면, max_time[1] := '9'로 설정합니다.
- 만약 '9' >= max_time[1] > '3'이라면, max_time[0] := '1'로 설정합니다.
- (max_time, s)에서 각 쌍 (mx, digit)을 순회하면서 다음을 수행합니다.
- digit이 실제 숫자라면 ans의 끝에 digit을 추가합니다.
- 그렇지 않다면, 즉 숨겨진 자리라면 ans의 끝에 mx를 추가합니다.
- 마지막으로 ans에 담긴 모든 문자를 연결하여 반환합니다.
예제 코드 (Python)
아래 구현을 통해 더 자세히 이해해 봅시다.
def solve(s):
ans = []
max_time = ['2','3',':','5','9']
if max_time[0] < '2':
max_time[1] = '9'
if '9' >= max_time[1] > '3':
max_time[0] = '1'
for mx,digit in zip(max_time,s):
if digit.isdigit():
ans.append(digit)
else:
ans.append(mx)
return ''.join(ans)
s= "1?:?5"
print(solve(s))입력
"1?:?5"
출력
13:55