두 가지 방법이 있는 데이터 구조를 만들고 싶다고 가정해 봅시다 -
- 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이 숫자일 때
- 참 반환
- n + n이 val과 같으면
- 거짓을 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
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