๋ณธ ๊ธ์ LeetCode Top Interview 150์ ์ ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์์ฝํ๊ณ ์ด์ ๋ํ ๊ฐ์ธ์ ์ธ ํ์ด๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
๋ณธ ํฌ์คํ ์๋ฆฌ์ฆ๋ 150 list์ ์์๋ฅผ ๋ฐ๋ผ์ ๊ฒ์ฌ๋ฉ๋๋ค. ํ์ด ์ธ์ด๋ python์ ์ฌ์ฉํฉ๋๋ค.
๋์ด๋: EASY
ํค์๋: Array, Two-Pointers
๋ฌธ์
๋ฌธ์ ์๋ฌธ: https://leetcode.com/problems/remove-duplicates-from-sorted-array/?envType=study-plan-v2&envId=top-interview-150
์ฃผ์ด์ง ๊ฐ์ํ์ง ์๋ ์์๋ก ์ ๋ ฌ๋ ์ ์ ๋ฐฐ์ด nums
์ด ์ฃผ์ด์ก์ ๋, ์ค์ง uniqueํ ๊ฐ๋ง ์๋๋ก in-placeํํ๋ก nums
๋ฅผ ์
๋ฐ์ดํธํด๋ผ. (๋ค์ ๋งํด, ์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํด๋ผ) ์ด ๋ ๊ฐ๋ค์ ์๋์ ์ธ ์์๋ ์ ์ง๋์ด์ผํ๋ค. nums
๋ด์ ์๋ uniqueํ element์ ๊ฐ์๋ฅผ ๋ฐํํด๋ผ.
๋ฌธ์ ํ์ด (Runtime Beats 81.92%, Memory Beats 88.81%)
์ด ๋ฌธ์ ์ญ์ Two-pointers ๊ธฐ๋ฒ์ผ๋ก ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค. In-place ๋ฐฉ์์ด ์๋๋ผ๋ฉด Counter๋ฅผ ์จ์ key()๊ฐ์ ๋ฐํํ๋ ํํ ๋ฑ์ผ๋ก๋ ํ ์ ์๊ฒ ์ง๋ง, ์ด ๋ฌธ์ ์ ํต์ฌ์ In-place๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผํ๋ค๋ ์ ์ด๋ค. ์ด ๋ฌธ์ ๋ ์ฌ์ค์ 27๋ฒ ๋ฌธ์ ์ ์ ์ฌํ๋ค.
๋ค๋ง ๋ํ ์ผ์ด ์กฐ๊ธ ๋ค๋ฅด๋ค. ์ฐ์๋๋ ๊ฐ์ธ ๊ฒฝ์ฐ in-placeํ๋ ๋ฐฐ์ด์ ์ ์ฅํ๋ฉด ์๋๋ค. ์ด๋ฅผ ์ํด์ ํ์ฌ in-placeํ๊ณ ์ํ๋ ์ปค์์ธ left์ ์ง์ ๊ฐ์ด ํ์ฌ ํ์ ์ปค์ right์ ๊ฐ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ right๋ ์ ์ง ํ์ํ๊ณ left์ ์ ๋ณด๋ ์ ๋ฐ์ดํธ ํ์ง ์๋ ํํ๋ก ์ฝ๋๋ฅผ ์์ฑํ์๋ค. ๋ค๋ง ์ด ๋ ์ฃผ์ํ ์ ์ left์ indexing์ด left-1์ ์กฐํํ๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ๊ฐ์ 0์ด์๋ 1๋ก ์ฃผ์ด์ผํ๊ณ , ์ด ๋์ exception handling์ ํจ๊ป ํด์ฃผ์๋ค. (๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 1์ธ๊ฒฝ์ฐ ์ด์ ๊ฐ์ ์กฐํํ ์ ์์ผ๋ฏ๋ก ๊ธธ์ด์ ํจ๊ป ๋ฐ๋ก ๋ฐํ)
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if len(nums) == 1:
return 1
left, right = 1, 1
while right < len(nums):
if nums[left-1] == nums[right]:
right += 1
else:
nums[left] = nums[right]
left += 1
right += 1
return left
Takeaway
- Two-pointers
๐ LeetCode 75 / Code Signal ํ์ด ๋ณด๋ฌ๊ฐ๊ธฐ
'IN DEPTH CAKE > Supercoder' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ฉ/LeetCode150-(6)] Rotate Array (189) (0) | 2023.08.20 |
---|---|
[์ฝ๋ฉ/LeetCode150-(5)] Majority Element (169) (2) | 2023.08.18 |
[์ฝ๋ฉ/LeetCode150-(4)] Remove Duplicates from Sorted Array II(80) (2) | 2023.08.18 |
[์ฝ๋ฉ/LeetCode150-(2)] Remove Element (27) (1) | 2023.08.17 |
[์ฝ๋ฉ/LeetCode150-(1)] Merge Sorted Array (88) (2) | 2023.08.16 |