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

쌍의 합이 파이썬의 값과 같은지 확인하기 위한 자료구조를 생성하는 프로그램

<시간/>

두 가지 방법이 있는 데이터 구조를 만들고 싶다고 가정해 봅시다 -

  • add(val) 데이터 구조에 val 값을 추가합니다.
  • find(val) 합이 val인지 아닌지를 확인하는 두 개의 요소

결과를 즉석에서 얻을 수 있도록 이것을 설계해야 합니다. 문의가 올 때마다 번호를 검색하지 않습니다.

따라서 입력이 obj 객체를 만들고 6, 14, 3, 8, 11, 15 몇 개의 숫자를 추가하는 것과 같으면 obj.find(9), obj.find(11), obj.find(15)와 같이 검사합니다. 9는 6+3으로 구성할 수 있고 11은 3+8로 구성할 수 있으므로 출력은 True, True, False가 됩니다. 이제 데이터 구조에 15가 있지만 두 숫자의 합이 15와 같지 않습니다.

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

  • 생성자를 정의합니다.
  • nums :=새 세트
  • 다중 :=새로운 세트
  • add() 함수를 정의합니다. val
      이 걸립니다.
    • 여러 개에 val 삽입
  • 그렇지 않으면
    • 숫자에 val 삽입
  • find() 함수를 정의합니다. 시간이 걸립니다
  • 숫자 단위의 각 n에 대해 다음을 수행합니다.
    • n + n이 val과 같으면
      • n이 배수일 때 true를 반환
    • 그렇지 않으면 val - n이 숫자일 때
      • 참 반환
  • 거짓을 반환

예시

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

class PairSumChecker:
   def __init__(self):
      self.nums = set()
      self.multiple = set()

   def add(self, val):
      if val in self.nums:
         self.multiple.add(val)
      else:
         self.nums.add(val)

   def find(self, val):
      for n in self.nums:
         if n + n == val:
            return n in self.multiple
         elif val - n in self.nums:
            return True
      return False

obj = PairSumChecker()
obj.add(6)
obj.add(14)
obj.add(3)
obj.add(8)
obj.add(11)
obj.add(15)

print(obj.find(9))
print(obj.find(11))
print(obj.find(15))

입력

print(obj.find(9))
print(obj.find(11))
print(obj.find(15))

출력

True
True
False