일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- codeup
- TwoPointer
- 파이썬알고리즘
- 릿코드
- Blazor
- 파이썬기초100제
- 구글퀵랩
- 머신러닝
- GenAI
- C#
- LeetCode
- 클라우드
- Azure
- Python
- nlp
- 리트코드
- 파이썬기초
- Python3
- 생성형AI
- 코드업
- 알고리즘
- 파이썬
- 데이터사이언스
- 코드업파이썬
- 투포인터
- GenerativeAI
- Microsoft
- 자연어처리
- gcp
- 빅데이터
Archives
- Today
- Total
Tech for good
[Leetcode/Two Pointer] 653. Two Sum IV - Input is a BST 본문
IT/Computer Science
[Leetcode/Two Pointer] 653. Two Sum IV - Input is a BST
Diana Kang 2025. 2. 15. 00:20
Two Pointer 방식으로 해결하는 방법
Two Pointer 방식을 사용하려면, BST(Binary Search Tree)의 중위 순회(in-order traversal)를 수행하여 오름차순으로 정렬된 리스트를 만든 후, 투 포인터를 사용하여 두 숫자의 합이 k가 되는지 확인하면 된다.
Two Pointer 알고리즘
- BST를 중위 순회하여 정렬된 리스트를 생성
- 중위 순회(In-order Traversal)를 수행하면 BST의 값이 오름차순으로 정렬됨.
- Two Pointer 기법을 활용하여 합이 k가 되는 두 수 찾기
- 리스트의 left(처음)과 right(끝) 포인터를 설정.
- 두 값의 합이 k보다 작으면 left를 증가.
- 두 값의 합이 k보다 크면 right를 감소.
- 두 값의 합이 k이면 True 반환.
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def findTarget(self, root: Optional[TreeNode], k: int) -> bool:
nums = [] # 중위 순회 결과를 저장할 리스트
# 중위 순회 함수 정의 (BST -> 정렬된 리스트 변환)
def inorder(node):
if not node:
return
inorder(node.left) # 왼쪽 서브트리 탐색
nums.append(node.val) # 현재 노드 값 추가
inorder(node.right) # 오른쪽 서브트리 탐색
inorder(root) # 중위 순회 실행
# Two Pointer를 사용하여 두 수의 합이 k가 되는지 확인
left, right = 0, len(nums) - 1 # 왼쪽 포인터와 오른쪽 포인터 설정
while left < right:
two_sum = nums[left] + nums[right] # 두 포인터의 합 계산
if two_sum == k: # 두 값의 합이 k라면 True 반환
return True
elif two_sum < k: # 합이 k보다 작으면 왼쪽 포인터 이동 (더 큰 값 탐색)
left += 1
else: # 합이 k보다 크면 오른쪽 포인터 이동 (더 작은 값 탐색)
right -= 1
return False # 조건을 만족하는 두 수가 없으면 False 반환
연산 | Time Complexity | Space Complexity |
중위 순회 (In-order Traversal) | O(N) | O(N) (리스트 저장) |
Two Pointer 탐색 | O(N) | O(1) (추가 공간 없음) |
총 복잡도 | O(N) | O(N) |
https://leetcode.com/problems/two-sum-iv-input-is-a-bst/
'IT > Computer Science' 카테고리의 다른 글
[Leetcode/Two Pointer] 19. Remove Nth Node From End of List (0) | 2025.02.15 |
---|---|
[Leetcode/Hash Set] 653. Two Sum IV - Input is a BST (0) | 2025.02.15 |
[Dart/Flutter] Flutter 앱 개발을 위한 Dart 배우기 - 2. Data Types (0) | 2023.03.04 |
[Dart/Flutter] Flutter 앱 개발을 위한 Dart 배우기 - 1. Variables (0) | 2023.03.04 |
[Visual Studio] 가장 쉽게 '브랜치 전환'하는 방법 (0) | 2022.11.16 |