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

Python에서 주어진 초를 더하거나 빼야만 12시로 돌아갈 수 있는지 확인하십시오.

<시간/>

n개의 서로 다른 두 번째 값의 배열이 있다고 가정합니다. 12시부터 시작해서 주어진 초만 더하거나 빼서 12시로 돌아갈 수 있는지 확인해야 합니다. 주어진 모든 초를 정확히 한 번 사용할 수 있습니다. 초를 더하거나 뺄 수 있습니다.

따라서 입력이 초 =[40,90,50]과 같으면 40을 더한 다음 90을 뺀 다음 다시 50을 더할 수 있으므로 출력은 True가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 크기 :=2^(초 배열의 길이)
  • 범위 0에서 크기 - 1까지의 c에 대해
    • 추가:=0
    • 0~1초 범위의 j에 대해
      • c AND(2^j)가 0이 아니면
        • 추가 :=추가 + 초[j]
      • 그렇지 않으면
        • 추가 :=추가 - 초[j]
    • 덧셈이 (24 * 60)으로 나누어지면
      • 참 반환
  • 거짓을 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(seconds):
   size = 2**len(seconds)
   for c in range(size):
      add = 0
      for j in range(len(seconds)) :
         if c & (1 << j):
            add += seconds[j]
         else:
            add -= seconds[j]
      if add % (24 * 60) == 0:
         return True
   return False
seconds = [40,90,50]
print(solve(seconds))

입력

[40,90,50]

출력

True