4개의 숫자 목록이 있고 각 숫자는 1에서 9까지의 범위에 있으며 고정된 순서로 나열되어 있다고 가정합니다. 이제 숫자 사이에 +, -, *, /(/는 정수 나누기를 나타냄) 연산자를 넣고 대괄호로 묶으면 값 24가 나올 수 있는지 확인해야 합니다.
따라서 입력이 nums =[5, 3, 6, 8, 7]과 같으면 출력은 (5 * 3) - 6 + (8 + 7) =24와 같이 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- recur() 함수를 정의합니다. 시간이 걸립니다
- 답변 :=새 목록
- 0 ~ arr - 1 크기 범위의 i에 대해
- pre :=recur(arr[인덱스 0에서 i까지])
- suf :=recur(arr[인덱스 i + 1에서 끝까지])
- pre의 각 k에 대해 do
- suf의 각 j에 대해
- 대답 끝에 (k + j) 삽입
- 대답 끝에 (k - j) 삽입
- 대답 끝에 (k * j) 삽입
- j가 0이 아니면
- 대답 끝에 (k/j의 몫) 삽입
- suf의 각 j에 대해
- 대답의 크기가 0이고 arr의 크기가 1이면
- 답변 끝에 arr[0] 삽입
- 반환 응답
- 메인 메소드에서 24가 recur(nums)에 있는지 여부를 확인하고, 그렇다면 True를 반환하고, 그렇지 않으면 False를 반환합니다.
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution: def solve(self, nums): def recur(arr): answer = [] for i in range(len(arr) - 1): pre, suf = recur(arr[: i + 1]), recur(arr[i + 1 :]) for k in pre: for j in suf: answer.append(k + j) answer.append(k - j) answer.append(k * j) if j != 0: answer.append(k // j) if len(answer) == 0 and len(arr) == 1: answer.append(arr[0]) return answer return 24 in recur(nums) ob = Solution() nums = [5, 3, 6, 8, 7] print(ob.solve(nums))
입력
[5, 3, 6, 8, 7]
출력
True