File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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 )
You can’t perform that action at this time.
0 commit comments