Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 주어진 시간의 동일한 자릿수를 재사용하여 가장 가까운 시간을 찾는 프로그램

<시간/>

"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)
  • 기본 방법에서 다음을 수행합니다.
  • 역추적(빈 문자열)
  • possible :=가능한 새 목록
  • 가능한 목록 정렬
  • 범위 0에서 가능한 - 2까지의 i에 대해
    • 가능한 경우[i]가 s와 같으면
      • 반품 가능[i + 1]
  • 반품 가능[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