๋ณธ ๊ธ์ LeetCode Top Interview 150์ ์ ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์์ฝํ๊ณ ์ด์ ๋ํ ๊ฐ์ธ์ ์ธ ํ์ด๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
๋ณธ ํฌ์คํ ์๋ฆฌ์ฆ๋ 150 list์ ์์๋ฅผ ๋ฐ๋ผ์ ๊ฒ์ฌ๋ฉ๋๋ค. ํ์ด ์ธ์ด๋ python์ ์ฌ์ฉํฉ๋๋ค.
๋์ด๋: MEDIUM
ํค์๋: Array, Two-Pointers
๋ฌธ์
์ฃผ์ด์ง ๊ฐ์ํ์ง ์๋ ์์๋ก ์ ๋ ฌ๋ ์ ์ ๋ฐฐ์ด nums์ด ์ฃผ์ด์ก์ ๋, ๋์ผํ ๊ฐ์ด ์ต๋ ๋๋ฒ๋ง ๋ฐ๋ณต๋๋๋ก in-placeํํ๋ก nums๋ฅผ ์ ๋ฐ์ดํธํด๋ผ. (๋ค์ ๋งํด, 3๋ฒ ์ด์ ์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํด๋ผ) ์ด ๋ ๊ฐ๋ค์ ์๋์ ์ธ ์์๋ ์ ์ง๋์ด์ผํ๋ค. ์ต์ข ์ ์ผ๋ก ์์ ๋ nums ๋ฐฐ์ด ๋ด์ ์๋ ์์์ ๊ฐ์๋ฅผ ๋ฐํํ๋ผ.
๋จ, ์ถ๊ฐ์ ์ธ ๋ฐฐ์ด ๋ฑ์ ์ด์ฉํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋ค์๊ณผ ๊ฐ์ด ์ ํ๋๋ค. ๋ค์ ๋งํด, ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ O(1)์ผ๋ก ์ ํ๋๋ค.
๋ฌธ์ ํ์ด (Runtime: 98.36% Beat, Memory: 54.08 %)
์ด ๋ฌธ์ ๋ ์์ 26๋ฒ ๋ฌธ์ ์ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ต๋๋ค. ๊ทธ๋์ ๋์ด๋๊ฐ MEDIUM์ด๋ผ๊ณ ๋ช ์๋์ด์์ง๋ง ๊ทธ๋ ๊ฒ ์ด๋ ค์ด ๋ฌธ์ ๋ ์๋๋๋ค. ์ ์ด์ 26๋ฒ ๋ฌธ์ ๋ฅผ ํ๋ ์ ๋ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์์ด์ ํนํ ๋ ์ด๋ ต์ง ์๋ค๊ณ ์๊ฐ๋์ต๋๋ค.
์ ๋ ๋ ๊ฐ์ pointer๋ฅผ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. left ์ปค์์ ๊ฒฝ์ฐ in-place๋ก ํธ์งํ ์์น๋ฅผ ๋ํ๋ด๋ฉฐ right ์ปค์๋ ๋ฐฐ์ด์ ์กฐํํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ฐ๋ผ์ right ์ปค์๊ฐ ๋ชจ๋ ๋ฐฐ์ด์ ์ํํ๋ฉด ์ข ๋ฃ๋ฉ๋๋ค.
์ฃผ์ด์ง ๋ฐฐ์ด์ ์ด๋ฏธ sorting๋์ด์๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์์ 2๊ฐ์ ์์๋ฅผ ์กฐํํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ง์ฝ ๋ฐฐ์ด์ ๋ฃ๊ณ ์ํ๋ ์์น์ ์ง์ ๊ฐ๊ณผ 2๊ฐ ์์ ๊ณณ์ ๊ฐ์ด right ์ปค์์ ๊ฐ๊ณผ ๊ฐ๋ค๋ฉด ํด๋น ์์๋ ๋ฐ์ด๋์ด์ฃผ์ด์ผํฉ๋๋ค. ๋ฐ๋ฉด ์ด์ ํด๋นํ์ง ์์ผ๋ฉด left ์์น์ ํด๋น ๊ฐ์ ์ฎ๊ฒจ ์ ๊ณ left ์ปค์์ right ์ปค์๋ฅผ ๊ฐ๊ฐ 1์ฉ ์ฆ๊ฐ์ํค๋ฉด๋ฉ๋๋ค. ์ต์ข ์ ์ผ๋ก right ์ปค์์ ์ํ๊ฐ ๋๋๋ฉด left ์ปค์๊ฐ ๊ฐ๋ฅดํค๋ ์ธ๋ฑ์ค ๊ฐ์ด ์ฐ๋ฆฌ๊ฐ ์ป๊ณ ์ํ๋ ์์ ๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋ํ๋ ๋๋ค.
์ด๋, ๋ฐฐ์ด์ indexing error๋ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 2 ์ดํ์ธ๊ฒฝ์ฐ๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋ฐํํ๋ ํํ๋ก ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if len(nums) == 1:
return 1
if len(nums) == 2:
return 2
left, right = 2, 2
while right < len(nums):
if nums[left-1] == nums[right] and nums[left-2] == nums[right]:
right += 1
else:
nums[left] = nums[right]
left += 1
right += 1
return left
'IN DEPTH CAKE > Supercoder' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ฉ/LeetCode150-(6)] Rotate Array (189) (0) | 2023.08.20 |
---|---|
[์ฝ๋ฉ/LeetCode150-(5)] Majority Element (169) (2) | 2023.08.18 |
[์ฝ๋ฉ/LeetCode150-(3)] Remove Duplicates from Sorted Array (26) (2) | 2023.08.17 |
[์ฝ๋ฉ/LeetCode150-(2)] Remove Element (27) (1) | 2023.08.17 |
[์ฝ๋ฉ/LeetCode150-(1)] Merge Sorted Array (88) (2) | 2023.08.16 |