Leetcode - Remove Duplicate Elements

Leetcode - Remove Duplicate Elements

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€

Daily Leetcode

Hits

๋ฌธ์ œ ๋งํฌ

์ค‘๋ณต๋œ ์›์†Œ๋ฅผ ์ง€์šฐ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด๊ฑด ์‚ฌ์‹ค 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)