์ƒˆ์†Œ์‹

IN DEPTH CAKE/Supercoder

[์ฝ”๋”ฉ/LeetCode150-(2)] Remove Element (27)

  • -
๋ฐ˜์‘ํ˜•

 

 

 

 

๋ณธ ๊ธ€์€ LeetCode Top Interview 150์— ์ •๋ฆฌ๋œ ๋ฌธ์ œ๋ฅผ ์š”์•ฝํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ํ’€์ด๋ฅผ ํฌํ•จํ•˜๊ณ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ณธ ํฌ์ŠคํŒ… ์‹œ๋ฆฌ์ฆˆ๋Š” 150 list์˜ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ผ์„œ ๊ฒŒ์žฌ๋ฉ๋‹ˆ๋‹ค. ํ’€์ด ์–ธ์–ด๋Š” python3์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๋‚œ์ด๋„: EASY

ํ‚ค์›Œ๋“œ: Array, Two-Pointers

 

 

 

๋ฌธ์ œ

 

๋ฌธ์ œ ์›๋ฌธ: https://leetcode.com/problems/remove-element/?envType=study-plan-v2&envId=top-interview-150

 

์ •์ˆ˜ ๋ฐฐ์—ด nums์™€ ์ •์ˆ˜ val ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ nums ๋‚ด์— val ๊ฐ’์„ in-place ํ˜•ํƒœ๋กœ ์ œ๊ฑฐํ•ด๋ผ. ์ด ๋•Œ ์š”์†Œ (elements)๋“ค์˜ ์ˆœ์„œ๋Š” ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ์—…๋ฐ์ดํŠธ ๋œ nums ๋‚ด์˜ element์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ.

์ฐธ๊ณ ๋กœ in-place ์ œ๊ฑฐ ์‹œ์— val ๊ฐ’๊ณผ ๊ฐ™์ง€ ์•Š์€ elements๋“ค์˜ ๊ฐœ์ˆ˜ k์™€ nums์˜ ๋ฐฐ์—ด ๊ธธ์ด๊ฐ€ ๊ฐ™์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์ฑ„์ ์‹œ์—๋Š” k ์ดํ›„์˜ ๊ฐ’๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ๋ฌด์‹œ๋œ๋‹ค.
ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” k ๊ฐ’์„ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

๋ฌธ์ œ ํ’€์ด (Runtime: Beats 38.18 % of users with Python3, Memory Beats 94.06%)

 

๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž Two pointer trick์œผ๋กœ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” easy ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. inplaceํ˜•ํƒœ๋กœ array๋ฅผ ์ˆœํ™˜ํ•˜๋˜ val๊ฐ’๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ๋›ฐ์–ด๋„˜๊ณ  ๋‹ค๋ฅธ ๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ๊ฒ ์ง€๋งŒ, ๋‚˜๋Š” ๊ฐ’์„ inplaceํ•˜๋Š” ์ปค์„œ์— ํ•ด๋‹นํ•˜๋Š” left ๊ทธ๋ฆฌ๊ณ  ๊ฐ’์„ ์กฐํšŒํ•˜๋Š” ์ปค์„œ์— ํ•ด๋‹นํ•˜๋Š”  right๋ฅผ ๋‘์–ด ์ถ”๊ฐ€์ ์ธ memory ์—†์ด ๋ณธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋„๋ก ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:

        left, right = 0, 0

        while right < len(nums):
            if nums[right] == val:
                right += 1
                continue
            nums[left] = nums[right]
            left += 1
            right += 1
        
        return left

 

left๋Š” ํ˜„์žฌ ๋ชฉ์ ์— ๋งž์ถ”์–ด in-place๋˜๊ณ ์žˆ๋Š” cursor์ด๊ณ , right๋Š” ์ „์ฒด array๋ฅผ ์กฐํšŒํ•˜๊ธฐ์œ„ํ•œ cursor์ด๋‹ค. ๋”ฐ๋ผ์„œ right cursor๊ฐ€ val ๊ฐ’๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” left์œ„์น˜์— ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š”  left ์œ„์น˜์— ์˜ฎ๊ฒจ์จ์ค€๋‹ค. ์ด๋ ‡๊ฒŒ right ์ปค์„œ๊ฐ€ ์ „์ฒด array๋ฅผ ์ˆœํšŒํ• ๋•Œ๊นŒ์ง€ ๊ฐ€๊ฒŒ๋˜๋ฉด ์ตœ์ข…์ ์œผ๋กœ left์˜ ์œ„์น˜๊ฐ€ in-place๋กœ ์—…๋ฐ์ดํŠธ๋œ array์˜ ๊ธธ์ด๊ฐ€ ๋œ๋‹ค.

 

๋ณต์žก๋„

 

N์„ nums์˜ ๊ธธ์ด๋ผ๊ณ ํ–ˆ์„ ๋•Œ, ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N), ๊ณต๊ฐ„ ๋ณต์žก๋„ O(N)

 

 

๐Ÿ“š LeetCode 75 / Code Signal ํ’€์ด ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

 

๋ฐ˜์‘ํ˜•
Contents

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

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

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