๋ณธ ๊ธ์ 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 ํ์ด ๋ณด๋ฌ๊ฐ๊ธฐ
'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-(3)] Remove Duplicates from Sorted Array (26) (2) | 2023.08.17 |
[์ฝ๋ฉ/LeetCode150-(1)] Merge Sorted Array (88) (2) | 2023.08.16 |