읽기 전
- 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
- 개인적으로 배운 점을 정리한 글입니다.
문제 링크
문제 풀이
3개에 값을 탐색해야 하는데 n의 값이 충분히 큰 상태면 브루트포스 방식으론 해결이 안된다 시간복잡도가 n3이기 때문이다. 이걸 좀 더 간소화하기 위해 포인터 기법을 써야한다. 여기선 한개의 포인터를 처음부터 오른쪽으로 진행하며 그 동안 다른 2개의 포인터가 나머지 원소들에 대해 조건이 충족되는지 검사해야 한다.
python 코드
class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: sol = [] nums.sort() for i in range(len(nums)): left, right = i + 1, len(nums) - 1 while left < right: s = nums[i] + nums[left] + nums[right] if s > 0: right -= 1 elif s < 0: left += 1 else: # 조건이 충족될 경우 sol.append([nums[i], nums[left], nums[right]]) # 원소 추가 while left < right and nums[left] == nums[left + 1]: left += 1 # 왼쪽의 값이 계속 같은 경우엔 제거 while left < right and nums[right] == nums[right - 1]: right -= 1 # 오른쪽의 값이 계속 같은 경우에도 제거 left += 1 # 0이 충족된 경우 해당 케이스는 끝났으므로 다른 값으로 진행 right -= 1
'Algorithms > LeetCode' 카테고리의 다른 글
LeetCode #238 Product of Array Except Self (0) | 2021.05.07 |
---|---|
LeetCode #42 Trapping Rain Water (0) | 2021.05.07 |
LeetCode #937 Reorder Data in Log Files (0) | 2021.04.24 |
LeetCode #819 Most Common Word (0) | 2021.04.24 |
LeetCode #344 Reverse String (0) | 2021.04.24 |