"hh:mm" 형식의 24시간 문자열이 있다고 가정하고 주어진 숫자를 재사용하여 형성할 수 있는 다음으로 가장 가까운 시간을 찾아야 합니다. 주어진 문자열의 숫자를 원하는 만큼 재사용할 수 있습니다.
따라서 입력이 s ="03:15"와 같으면 출력은 주어진 숫자를 반복하는 가장 가까운 시간 03:30과 같이 03:30이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
- use :=두 자리 시간과 두 자리 최소 값이 있는 목록
- 가능 :=새로운 세트
- backtrack() 함수를 정의합니다. 이것은 길을 가겠습니다
- 경로의 크기가 4와 같으면
- (경로[처음 두 자리] 연결 ":" 연결 경로[마지막 두 자리]) 및 가능한에 삽입합니다.
- 반환
- 사용 중인 각 p에 대해 다음을 수행합니다.
- if (경로의 크기가 0과 같고 p>
"2")가 거짓이고 (경로가 "2"와 같고 p>
"3")이 거짓이고 (경로의 크기가 2와 같고 p>
"5")가 거짓이면
- 역추적(경로 + p)
- if (경로의 크기가 0과 같고 p>
"2")가 거짓이고 (경로가 "2"와 같고 p>
"3")이 거짓이고 (경로의 크기가 2와 같고 p>
"5")가 거짓이면
- 기본 방법에서 다음을 수행합니다.
- 역추적(빈 문자열)
- possible :=가능한 새 목록
- 가능한 목록 정렬
- 범위 0에서 가능한 - 2까지의 i에 대해
- 가능한 경우[i]가 s와 같으면
- 반품 가능[i + 1]
- 가능한 경우[i]가 s와 같으면
- 반품 가능[0]
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예시
class Solution: def solve(self, s): use = [s[0], s[1], s[3], s[4]] possible = set() def backtrack(path): nonlocal possible, use if len(path) == 4: possible.add(path[:2] + ":" + path[2:]) return for p in use: if (not (len(path) == 0 and p > "2") and not (path == "2" and p > "3") and not (len(path) == 2 and p > "5")): backtrack(path + p) backtrack("") possible = list(possible) possible.sort() for i in range(len(possible) - 1): if possible[i] == s: return possible[i + 1] return possible[0] ob = Solution() s = "03:15" print(ob.solve(s))
입력
"03:15"
출력
03:30