๋ณธ ๊ธ์ LeetCode Top Interview 150์ ์ ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์์ฝํ๊ณ ์ด์ ๋ํ ๊ฐ์ธ์ ์ธ ํ์ด๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค. ๋ณธ ํฌ์คํ
์๋ฆฌ์ฆ๋ 150 list์ ์์๋ฅผ ๋ฐ๋ผ์ ๊ฒ์ฌ๋ฉ๋๋ค. ํ์ด ์ธ์ด๋ python์ ์ฌ์ฉํฉ๋๋ค.
๋์ด๋ : MEDIUM
ํค์๋ : Array, Two-Pointers
๋ฌธ์
๋ฌธ์ ์๋ฌธ: https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/description/?envType=study-plan-v2&envId=top-interview-150
์ฃผ์ด์ง ๊ฐ์ํ์ง ์๋ ์์๋ก ์ ๋ ฌ๋ ์ ์ ๋ฐฐ์ด 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
๐ LeetCode 75 / Code Signal ํ์ด ๋ณด๋ฌ๊ฐ๊ธฐ