Leetcode - Remove Duplicate Elements
์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ
์ค๋ณต๋ ์์๋ฅผ ์ง์ฐ๋ ๋ฌธ์ ์ด๋ค. ์ด๊ฑด ์ฌ์ค Naive๋ฅผ ์๊ฐํ๋๊ฒ ๋ ์ด๋ ค์ด ๋ฌธ์ ์ด๋ค. ๊ตณ์ด ์๊ฐํ์๋ฉด count() ํจ์๋ฅผ ์จ์ ์ด๋ ๊ฒ ์ ๋ ๊ฒ ํด๋ณด๊ฒ ๋ค~ ๋ผ๊ณ ํ์ง๋ง ๊ฒฐ๊ตญ ํต์ฌ in-place
์์ ์ญ์ ๊ฐ ์ด๋ค์ ธ์ผ ํ๋ค. ๊ทธ๋ผ ๊ฒฐ๊ตญ ํฌ์ธํฐ๋ฅผ ์ธ ์ ๋ฐ์..
๐ฅฝ Solution
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
"""
์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ๋์ด ์๋ค๋ ๊ฒ -> ์ค๋ณต์ด ๋์ด์๋ค๋ฉด ์ฐ์ํด์ ๋ฑ์ฅํ๋ค๋ ๊ฒ
"""
idx = 0
n = len(nums)
for i in range(n):
if nums[i] != nums[idx]: #์ค๋ณต๋์ง ์์ ์ซ์ ๋ฐ๊ฒฌ
idx += 1
nums[idx] = nums[i]
return idx+1
์ฃผ์์๋ ์จ๋์์ง๋ง ์ด ๋ฌธ์ ์ ํํธ๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ๋์ด ์๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ค๋ณต์ด ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ด์ฉ ์ ์์ด ์ฐ์ํด์ ๋ฑ์ฅํ ์ ๋ฐ์ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ฝ๋๋ฅผ ๋ณด๋ฉด idx๋ฅผ ์ก์๋๊ณ ์ด์ ์ nums[idx]
์ ๋ค๋ฅด๋ค๋ฉด ์๋ก์ด ์์๊ฐ ๋์๋ค๋ ๋ป์ด๋ฏ๋ก idx๋ฅผ ํ๋ ์ฌ๋ ค์ฃผ๊ณ ๊ทธ idx ์๋ฆฌ์ ํด๋น ๋ฐ์ดํฐ๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๊ฒฐ๊ตญ idx๋ ๋ง์ง๋ง์ ์ค๋ณต๋ ๊ฒ๊น์ง์ ์์๋ฅผ ๊ฐ๋ฅดํค๊ณ ์๊ธฐ์ +1์ ํด์ฃผ์ด ์ค๋ณต๋์ง ์์ ์ซ์๊ฐ ๋ช๊ฐ์ธ์ง๋ฅผ ์๋ ค์ค ์ ์๊ฒ ๋๋ค.
๐ป Complexity
- Time : O(n)
- Space : O(1)