시간 문자열에 '?'처럼 알 수 없는(숨겨진) 자릿수가 포함되어 있을 때, 이를 적절한 숫자로 대체하여 만들 수 있는 가장 늦은 유효 시간을 구해야 하는 경우가 있습니다. 이를 위해서는 먼저 숨겨진 자릿수를 찾아내는 메서드를 정의한 뒤, 각 자릿수의 위치(인덱스)에 따라 올바른 값으로 변환하면 됩니다.
예제
다음은 그 구현 예시입니다.
def find_latest_time(my_time):
my_time = list(my_time)
for i in range(len(my_time)):
if my_time[i] == "?":
if i == 0: my_time[i] = "2" if my_time[i+1] in "?0123" else "1"
elif i == 1: my_time[i] = "3" if my_time[0] == "2" else "9"
elif i == 3: my_time[i] = "5"
else: my_time[i] = "9"
print("".join(my_time))
my_str = '0?:?3'
print("The time is :")
print(my_str)
print("The latest valid time is : ")
find_latest_time(my_str)
출력 결과
The time is : 0?:?3 The latest valid time is : 09:53
동작 원리
'find_latest_time'이라는 이름의 메서드를 정의하고, 시간 문자열을 매개변수로 전달받습니다.
문자열을 리스트로 변환하여 각 자릿수를 개별적으로 다룰 수 있도록 합니다.
리스트를 순회하면서 '?'로 표시된 알 수 없는 자릿수를 찾아냅니다.
인덱스가 0, 1, 3인 경우에는 해당 위치에 맞는 특정 값으로 대체합니다.
메서드 외부에서 시간 문자열을 정의하고 콘솔에 출력합니다.
이 문자열을 인자로 넘겨 메서드를 호출합니다.
최종 결과가 콘솔에 출력됩니다.
자릿수별 대체 규칙
24시간제(HH:MM) 형식에서 각 자리가 가질 수 있는 최댓값은 다음과 같이 결정됩니다.
시간 십의 자리(인덱스 0): 바로 뒤의 자리가 '?', '0', '1', '2', '3' 중 하나라면 '2'를, 그렇지 않으면 '1'을 사용합니다.
시간 일의 자리(인덱스 1): 앞의 자리가 '2'라면 최대 '3'까지만 가능하고, 그렇지 않으면 '9'를 사용합니다.
분의 십의 자리(인덱스 3): 분은 00~59 범위이므로 항상 '5'를 사용합니다.
분의 일의 자리(인덱스 4): 항상 '9'를 사용합니다.
예를 들어 입력이 '0?:?3'이라면 시간 부분은 '09', 분 부분은 '53'이 되어, 최종적으로 '09:53'이라는 가장 늦은 유효 시간이 도출됩니다.