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]
- c AND(2^j)가 0이 아니면
- 덧셈이 (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