Skip to content

Commit 5cff581

Browse files
committed
[7th batch] week 2 - 3sum
1 parent 1655639 commit 5cff581

1 file changed

Lines changed: 36 additions & 0 deletions

File tree

3sum/liza0525.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,39 @@ def threeSum(self, nums: List[int]) -> List[List[int]]:
3636
results.add((nums[i], nums[left], nums[right]))
3737
left, right = left + 1, right - 1
3838
return list(results)
39+
40+
41+
# 7기 풀이
42+
# 시간 복잡도: O(n^2)
43+
# - 배열 정렬: O(n log n)
44+
# - for문과 while문을 이용한 이중 loop문으로 탐색: O(n^2)
45+
# - 전체 시간 복잡도는 O(n^2)
46+
# 공간 복잡도: O(1)
47+
# - 결과 저장 공간은 output이므로 제외 (변수 이름: results)
48+
class Solution:
49+
def threeSum(self, nums: List[int]) -> List[List[int]]:
50+
nums.sort() # 정렬을 한 번 한 후
51+
results = set()
52+
53+
# for 문과 투포인터를 이용해 문제를 푼다.
54+
for i in range(len(nums) - 2):
55+
# i번째와 i - 1 번째 값이 같은 경우에는 이미 이전 loop에서 계산했기 때문에 다음 루프로 넘긴다
56+
if i > 0 and nums[i] == nums[i - 1]:
57+
continue
58+
59+
# 포인터 지정
60+
left, right = i + 1, len(nums) - 1
61+
while left < right:
62+
result = nums[i] + nums[left] + nums[right]
63+
if result < 0:
64+
# 합이 0보다 작다면 요소의 값을 올려야 하기 때문에 left를 올린다. (nums는 정렬이 된 상태)
65+
left += 1
66+
elif result > 0:
67+
# 합이 0보다 크다면 요소의 값을 줄여야 하기 때문에 right를 내린다. (nums는 정렬이 된 상태)
68+
right -= 1
69+
else:
70+
# 합이 0이면 결과 저장 후, 포인터를 조정하여 다음 triplet 세트를 찾는다.
71+
results.add((nums[i], nums[left], nums[right]))
72+
left, right = left + 1, right - 1
73+
74+
return list(results)

0 commit comments

Comments
 (0)