์ƒˆ์†Œ์‹

IN DEPTH CAKE/Supercoder

[์ฝ”๋”ฉ/LeetCode150-(3)] Remove Duplicates from Sorted Array (26)

  • -
๋ฐ˜์‘ํ˜•

 

๋ณธ ๊ธ€์€ 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 ํ’€์ด ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

# ๋กœ๋”ฉ ํ™”๋ฉด ๋™์ž‘ ์ฝ”๋“œ(Code) ์„ค์ •ํ•˜๊ธฐ