์ƒˆ์†Œ์‹

IN DEPTH CAKE/Supercoder

[์ฝ”๋”ฉ/LeetCode150-(4)] Remove Duplicates from Sorted Array II(80)

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

๋ฐ˜์‘ํ˜•
Contents

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

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

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