๐ก ๋ฌธ์
๐ฏ ํ์ด ๊ณผ์
์ฃผ์ด์ง ๋ฐฐ์ด์์ 3๊ฐ์ ์์์ ์กฐํฉ ์ค ํฉ์ด 0์ธ ๊ฒ๋ค์ ์ค๋ณต์์ด ๋ชจ๋ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค.
๋ค๋ง ์ ๋ ฅ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํด์ ์ผ๋ฐ ์กฐํฉ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค.
ํฌ ํฌ์ธํฐ
์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ๋ฉด, ํน์ ํฉ S
๋ฅผ ๋ง์กฑํ๋ ๋ฐฐ์ด ์์ ์ค๋ณต์์ด ์ฐพ๋๋ฐ ํ์ฉํ ์ ์์ต๋๋ค.
์ด๋ ๋ฐฐ์ด์ ์ ๋ ฌ์ด ๋ ์ํ์ฌ์ผํฉ๋๋ค. (์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ํด)
์ด ๋ฌธ์ ๋ฅผ ์ฝ๊ฐ ๋ณํํด๋ณด๋ฉด ์ธ ์์ ์ค ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ์์๋ฅผ pivot
์ผ๋ก ์ ํ๊ณ ,
๋๋จธ์ง ๋ ์์๋ pivot
์ ์ ์ธํ ๊ตฌ๊ฐ์์ sum - arr[pivot]
์ ์ฐพ๋ ๋ฌธ์ ๋ก ํด์ํ ์ ์์ต๋๋ค.
์ด๋ ์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ํด pivot
์ด ๋ฐ๋ก ์ง์ pivot
๊ฐ๊ณผ ๋์ผํ ๊ฒฝ์ฐ ๋ฌด์ํ๊ณ ,
๋ง์ฐฌ๊ฐ์ง๋ก ๋๋จธ์ง ๋ ์์ ์ค ์ฒซ๋ฒ์งธ ์์์ธ head
๋ฅผ ์ ํ ๋ ์ด์ head
์ ๋์ผํ๋ค๋ฉด ๋ฌด์ํด์ค๋๋ค.
๐จ๐ป ์ฝ๋
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function(nums) {
function twoSum(pivot) {
const result = []
let head = pivot + 1
let tail = nums.length - 1
while (head < tail) {
const sum = nums[pivot] + nums[head] + nums[tail]
if (sum === 0) {
if (head > pivot + 1 && nums[head] === nums[head - 1]) {
head += 1
continue
}
result.push([nums[pivot], nums[head], nums[tail]])
head += 1
} else if (sum < 0) {
head += 1
} else {
tail -= 1
}
}
return result
}
const answer = []
nums.sort((a, b) => a - b)
for (let pivot = 0; pivot < nums.length - 2; pivot += 1) {
if (pivot > 0 && nums[pivot] === nums[pivot - 1]) {
continue
}
const result = twoSum(pivot)
answer.push(...result)
}
return answer
};
'๐ algorithm > leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
LeetCode 2390 - Removing Stars From a String (Medium) (0) | 2023.04.24 |
---|---|
LeetCode 1603 - Design Parking System (Easy) (0) | 2023.04.24 |
LeetCode 13 - Roman to Integer (Easy) (0) | 2023.04.24 |
LeetCode 994 - Rotting Oranges (Medium) (0) | 2023.04.24 |
LeetCode 24 - Swap Nodes in Pairs (Medium) (0) | 2023.02.20 |
๐ฌ ๋๊ธ