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

파이썬에서 연산자를 배치하여 24를 형성할 수 있는지 확인하는 프로그램

<시간/>

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의 몫) 삽입
  • 대답의 크기가 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