Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 숨겨진 숫자를 대체해 가장 늦은 유효 시간 찾는 프로그램

문제 개요

문자열 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