์๋ฐ ์ฝ๋
import java.util.*;
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
Set<List<Integer>> set = new HashSet<>();
List<List<Integer>> ans = new ArrayList<>();
for(int i=0;i<nums.length;i++){
int left = i+1;
int right = nums.length-1;
while(left<right){
int sum = nums[i]+nums[left]+nums[right];
if(sum == 0){
set.add(Arrays.asList(nums[i],nums[left],nums[right]));
left+=1;
right-=1;
}else if(sum<0){
left+=1;
}else{
right-=1;
}
}
}
ans.addAll(set);
return ans;
}
}
ํ์ด์ฌ ์ฝ๋
class Solution(object):
def threeSum(self, nums):
nums.sort()
_set = set()
for i,num in enumerate(nums):
left = i+1
right = len(nums)-1
while left<right:
_sum = num+nums[left]+nums[right]
if _sum==0:
_set.add((num,nums[left],nums[right]))
left+=1
right-=1
elif _sum<0:
left+=1
else:
right-=1
return list(_set)
๋จผ์ nums ๋ฅผ ์ ๋ ฌํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๊ธฐ์ค๊ฐ์ ์ ์ธํ 2๊ฐ์ ํฌ์ธํฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ธฐ์ค๊ฐ + ์ผ์ชฝ ํฌ์ธํฐ ๊ฐ + ์ค๋ฅธ์ชฝ ํฌ์ธํฐ ๊ฐ ์ด 0์ธ ๊ฒฝ์ฐ๋ set์ ์ถ๊ฐํด์ฃผ๊ณ ์ผ์ชฝ ํฌ์ธํฐ๋ฅผ -1, ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ฅผ +1 ํด์ค๋ค.
0๋ณด๋ค ์์ผ๋ฉด ์ ๋ ฌ๋์ด์์ผ๋ฏ๋ก ์ผ์ชฝ ํฌ์ธํฐ๋ฅผ 1 ์ฆ๊ฐ์์ผ์ ํ์ธํด๋ณธ๋ค.
0๋ณด๋ค ํฌ๋ค๋ฉด ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ฅผ 1 ๊ฐ์์์ผ์ ํ์ธํด๋ณธ๋ค.
์์๋ก ๋ณด๋ฉด,
[-1, 0, 1, 2, -1, -4] ๊ฐ ์์ ๋, ์ ๋ ฌํ๋ฉด [-4, -1, -1, 0, 1, 2] ๊ฐ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ๊ธฐ์ค์ -4๋ก ์ก๊ณ 3๊ฐ์ ์์์ ํฉ์ด 0์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋๋ค.
L R
-4 -1 -1 0 1 2
์์ ๊ฐ์ด ์ผ์ชฝ ํฌ์ธํฐ L์ด -1 ์ด๊ณ ์ค๋ฅธ์ชฝ ํฌ์ธํฐ R์ด 2๋ผ๋ฉด, -4+-1+2 = -3 ์ด๊ณ , 0๋ณด๋ค ์๋ค.
ํฉ์ด 0๋ณด๋ค ์์ ๊ฒฝ์ฐ๋ L๋ง ์ฆ๊ฐ ์ํจ๋ค.
์ด๋ฐ ๋ฐฉ์์ผ๋ก ๊ณ์ ํ์ํด๋ณธ๋ค.
-4๊ฐ ๊ธฐ์ค์ผ๋๋ 3 ์์์ ํฉ์ด 0์ด ๋๋ ๊ฒฝ์ฐ์ ์๊ฐ ์กด์ฌํ์ง ์๋๋ค.
๋ง์ฝ -1์ด ๊ธฐ์ค์ผ๋๋
L R
-4 -1 -1 0 1 2
-1 + -1 + 2 = 0 ์ด ๋๋ฏ๋ก, set์ ์ถ๊ฐํด์ค๋ค.
ํฉ์ด 0์ด ๋๋ ๊ฒฝ์ฐ์๋ L๋ +1 ํด์ฃผ๊ณ R๋ -1 ํด์ค๋ค.
L R
-4 -1 -1 0 1 2
-1 + 0 + 1 ๋ ํฉ์ด 0์ด๋ฏ๋ก set์ ์ถ๊ฐํด์ค๋ค.
๊ทธ ๋ค์ ๊ธฐ์ค๊ฐ๋ -1์ธ๋ฐ
L R
-4 -1 -1 0 1 2
์ ๊ฒฝ์ฐ๋ -1 + 0 + 2 ์ด๋ฏ๋ก 0๋ณด๋ค ํฌ๋ค. ๋ฐ๋ผ์ ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ฅผ ๊ฐ์์ํจ๋ค.
L R
-4 -1 -1 0 1 2
์ ์ํฉ์ด -1 + 0 + 1 ์ด๋ผ์ ํฉ์ด 0์ด๊ณ , set์ ์ถ๊ฐํ๋ฉด๋๋ค.
์ด๋ฏธ ์ถ๊ฐ๋์ด์์ง๋ง, set ์๋ฃ๊ตฌ์กฐ ํน์ฑ ์ ์ค๋ณต์ผ๋ก ์ถ๊ฐ๋์ง ์๋๋ค.