leetCode submit ํต๊ณผํ๋ฉด ๋ค๋ฅธ ๋ถ๋ค์ด ์ง ๋์ผ์ ํ์์ ์ธ ์๊ณ ๋ฆฌ์ฆ ๋ณผ ์ ์์ต๋๋ค. ์ ๊ป ์ฐธ๊ณ ์ ํต๊ณผ์ฉ์ผ๋ก ๋ด์ฃผ์ธ์ ใ ใ
ํจ์จ์ฑ ๊ฐ๋ค๋ฒ๋ฆฐ ์ฝ๋์ ๋๋ค. ํํฃ
๋ค๋ฅธ ๊ธ์์ ์ผํ ๋ ธ๊ฐ๋ค ์ฝ๋๋ผ๊ณ ์ ํ ๊ฑธ ๋ดค์ด์ ใ ใ ์๋ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํ์ํ๋ ๊ฒ๋ ์๊ฒ ์ง๋ง ์ด๋ป๊ฒ๋ ํ์ ๋ฒ์๋ฅผ ์ค์ด๋ ๊ฒ์ด ์ด ๋ฌธ์ ์์ time ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋๊น ์ถ์ต๋๋ค.
๐๊ด๊ณ ๋ถ์ด๊ณ ๋ฌธ์ ๋ ์์ ์ฌ๋ฆฌ๋ฉด ์๋๋ค๊ณ ๋ค์ด์ ๋ฌธ์ ๋ ๋งํฌ๋ก ๋์ ํฉ๋๋ค ๐
https://leetcode.com/problems/3sum/
3Sum - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
์๊ณ ๋ฆฌ์ฆ
์ฐ์ ์ ๋ ฌ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค! ์ ๋ ฌ์ ํด์ฃผ๋ ์ด์ ๋ ๋ ๊ฐ์ง ์ ๋ ์ธ๋ฐ์, ์ฒซ ๋ฒ์งธ๋ก๋ ์ค๋ณต๋๋ ์ซ์๋ฅผ ๋ฐ๋ก ์ ์ธ๋ฑ์ค์ ๋น๊ตํด์ ์ ์ ์๊ณ , ๋๋ฒ์งธ๋ ์ธ๊ฐ์ ์ซ์๋ฅผ ๋ํ ๊ฐ์์ ์ ์ฐํ๊ฒ ๋์ฒํ๊ธฐ ์ํด์ ์ ๋๋ค.
์ธ๊ฐ์ ์ซ์๋ฅผ ๋ํ ๊ฐ์ด ๋ง์ฝ 0๋ณด๋ค ํฌ๋ค๋ฉด ํ์ฌ ์ธ๊ฐ์ ์ซ์ ํฉ์์ ์ด๋ค ์ซ์๋ฅผ ์๊ฒ ๋ง๋ค์ด ์ฃผ๋ฉด ๋๋ ๊ฒ์ด๊ณ , ๋ง์ฝ ์ธ๊ฐ์ ์ซ์๋ฅผ ๋ํ ๊ฐ์ด 0๋ณด๋ค ์๋ค๋ฉด ์ธ๊ฐ์ ์ซ์ ํฉ์์ ์ด๋ค ์ซ์๋ฅผ ๊ทธ ๋ณด๋ค ๋ ํฐ ๊ฒ์ผ๋ก ๋์ฒํด ์ฃผ๋ฉด ๋๋ ๊ฒ์ ๋๋ค.
๐์์ธํ ์ค๋ช ์ ์๋ ์ ํ๋ธ๋ฅผ ํตํด ์ฐธ๊ณ ํ์ต๋๋ค๐
https://www.youtube.com/watch?v=6qgC-dqKElA
์ฐ์ ์ฃผ์ด์ง nums ์ด๋ ์ด๋ฅผ sort ํด์ค๋๋ค. ์ค์ํํธ๋ก๋
nums.sort()
ํด์ฃผ์๋ฉด ๋ฐฐ์ด์ ์ ๋ ฌํ ์ ์์ต๋๋ค.
ํ์ฌ ๊ฐ current๋ฅผ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค ์ธ -4๋ก ์ง์ ํ๊ณ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค ๋ฐ๋ก ์์ ์ธ๋ฑ์ค๋ฅผ leftIndex, ๋งจ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ rightIndex๋ก ์ง์ ํด์ค๋๋ค. ์ด๋ ์ธ๊ฐ์ ๊ฐ์ ๋ํฉ๋๋ค. total sum = current + left + right ๊ฐ ์ธ๋ฑ์ค์ ์๋ ๊ฐ์ ๋ํด์ฃผ๊ณ 0๊ณผ ๋น๊ตํฉ๋๋ค.
์ ๊ทธ๋ฆผ์์ ์ธ๊ฐ์ ์ซ์ ํฉ์ -3์ด๋ฏ๋ก 0๋ณด๋ค ์๊ธฐ ๋๋ฌธ์ ํฐ ์ซ์๊ฐ ํ์ํ๊ฒ ๋ฉ๋๋ค.
์ด๋ ๋นจ๊ฐ ์ ์ ๋ด์ฃผ์ธ์! ์ธ๊ฐ์ ์ซ์ ์ค ํ๋๋ฅผ ํฐ ์ซ์๋ก ๋ฐ๊ฟ ์ค๋ค๋ฉด 0 ๊ณผ ๊ฐ๊น์ ์ง๊ฒ ๋๋ ์๋ฆฌ ์ ๋๋ค. ๋ฐ๋ผ์ + ๋ฐฉํฅ์ผ๋ก left๋ฅผ ์ด๋ํด ์ฃผ๋ฉด ๊ฐ์ด ์ ์ ์ปค์ง๋ฏ๋ก ํ์ฌ left์ ์๋ ์ซ์๋ณด๋ค ๋ ํฐ ๊ฐ์ผ๋ก ๊ฐ์ ๋ฐ๊ฟ ์ ์์ต๋๋ค. (ํ์ฌ๋ -1 ์์ -1์ด์ง๋ง...)
๊ณ์ ์ฎ๊ฒจ ์ฃผ๋ค๊ฐ ๋ง์ฝ ์ธ๊ฐ์ ํฉ์ด 0๋ณด๋ค ํฌ๊ฒ ๋๋ฉด right. ์ธ๋ฑ์ค๋ฅผ - ๋ฐฉํฅ์ผ๋ก ์ฎ๊ฒจ์ ์ด ํฉ์ ํฌ๊ธฐ๋ฅผ ์๊ฒ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ค๊ฐ ์ํ๋ ๋ฐฐ์ด ์กฐํฉ์ ์ฐพ์ง ๋ชปํ๋ฉด current ์ธ๋ฑ์ค๋ฅผ ์ฎ๊ฒจ ์ค๋๋ค,
left ์ธ๋ฑ์ค๋ ๋ฌด์กฐ๊ฑด current ์ธ๋ฑ์ค์ +1 ์์ ์์ํด์ผ ํ๊ณ right๋ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ก ์ง์ ํด ์ฃผ๋ฉด ๋๋๋ฐ
์ด๋ current index์ ์ผ์ชฝ์ ์ ๊ฒฝ ์จ์ฃผ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฏธ ํ์์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฅผ ๊ทธ๋๋ก ํด์ฃผ๋ฉด ์ธ์์ ํ์ 7%๊ฐ ๋์ต๋๋ค!
์์ ์ ์๋ฏ์ด ํ์ ๋ฒ์๋ฅผ ์ค์ฌ ์ฃผ์ ์ผ ํด์ ใ ใ ใ ใ
๊ทธ ์ค ํ๋๋ ๋ณต์์ ๊ฐ์ ๋์ฒ ํ๋ ๊ฒ์ ๋๋ค.
๋ฌธ์ ์์ ์ ์ํ๋ ๋ณต์ ์กฐํฉ๋ ์ค์ฌ์ค ๋ฟ๋ง ์๋๋ผ ์ด๋ ๊ฒ ํด์ฃผ์ด์ผ ํ์ ๋ฒ์์ ์๊ฐ๋ ์ค์ด ๋ญ๋๋ค.
class Solution {
func threeSum(_ nums: [Int]) -> [[Int]] {
var newNums = nums
newNums.sort()
var answer = [[Int]]()
var currentIndex = 0
var leftIndex = currentIndex + 1
var lastIndex = newNums.count - 1
var rightIndex = lastIndex
while currentIndex < newNums.count - 2 {
if (currentIndex != 0) && (newNums[currentIndex] == newNums[currentIndex-1]) {
currentIndex += 1
leftIndex = currentIndex + 1
rightIndex = lastIndex
continue
}
while leftIndex != rightIndex {
let currentSum = newNums[currentIndex] + newNums[leftIndex] + newNums[rightIndex]
if currentSum < 0 {
leftIndex += 1
}
if currentSum > 0 {
rightIndex -= 1
}
if currentSum == 0 {
let subAnswerArray = [newNums[currentIndex], newNums[leftIndex], newNums[rightIndex]]
answer.append(subAnswerArray)
leftIndex += 1
}
}
currentIndex += 1
leftIndex = currentIndex + 1
rightIndex = lastIndex
}
return Array(Set(answer))
}
}
์ฐ์ ํต๊ณผํ ์ฝ๋์ธ๋ฐ ์ถํ์ ํจ์จ์ฑ ๊ณ ๋ คํด์ ๋ง์ง๋ง ๋ณต์ ์ ๊ฑฐํ๋ ค๊ณ ๋ฃ์ set ๋ถ๋ถ์ ๊ณ ์ณ๋ด์ผ ๋ ๊ฑฐ ๊ฐ์์ ใ ใ
์ฒซ ๋ฐ๋ณต๋ฌธ์ ๋ฒ์๋
์ฐ์ ํ์ฌ ์ธ๋ฑ์ค์์ ์ค๋ฅธ์ชฝ์ ์๋ ๋๊ฐ์ ์ซ์๋ก ์กฐํฉํ๋ฏ๋ก ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ count-1์ด๋ผ ํ ๋ ์ค๋ฅธ์ชฝ์ ๋ ๊ฐ์ ์ซ์๋ฅผ ๋จ๊ฒจ์ผ ํ๋ฏ๋ก count-3 ๊น์ง๋ง ๋ฐ๋ณตํ์ฌ ์กฐํํ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฒ์๋ 0 < index < count-2 ๊ฐ ๋ฉ๋๋ค.
'๐ Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 724. Find Pivot Index (0) | 2022.08.01 |
---|---|
[LeetCode] 1480 Running Sum of 1d Array (0) | 2022.07.29 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ฃผํ์ง ๋ชปํ ์ ์ with python (feat. hash) (0) | 2020.10.13 |
[leetCode] 152. Maximum Product Subarray ์นด๋จ ์๊ณ ๋ฆฌ์ฆ์ ๋ณํ (0) | 2020.10.12 |
[leetCode] 53. Maximum Subarray with Swift ์นด๋จ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฝ๊ฒ ๊ตฌํ๊ธฐ (0) | 2020.10.06 |
๋๊ธ