๋ณธ ๊ธ์ LeetCode Top Interview 150์ ์ ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์์ฝํ๊ณ ์ด์ ๋ํ ๊ฐ์ธ์ ์ธ ํ์ด๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
๋ณธ ํฌ์คํ ์๋ฆฌ์ฆ๋ 150 list์ ์์๋ฅผ ๋ฐ๋ผ์ ๊ฒ์ฌ๋ฉ๋๋ค. ํ์ด ์ธ์ด๋ python์ ์ฌ์ฉํฉ๋๋ค.
๋์ด๋: EASY
ํค์๋: Array, Hash Table
๋ฌธ์
๋ฌธ์ ์๋ฌธ: https://leetcode.com/problems/majority-element/description/
ํฌ๊ธฐ๊ฐ n
์ธ ๋ฐฐ์ด nums
๊ฐ ์ฃผ์ด์ก์ ๋, ์ต๋น๋ (the majority) ์์๋ฅผ ๋ฐํํด๋ผ. ์ต๋น (majority) ์์๋ ํญ์ ์กด์ฌํ๋ฉฐ, ์ด ์์์ ์๋ ๋ฐฐ์ด ๊ธธ์ด์ ์ ๋ฐ์ ๋๋๋ค.
์์
Input: nums = [3,2,3]
Output: 3
Input: nums = [2,2,1,1,1,2,2]
Output: 2
ํ์ด (Runtime: Beats 90.34%, Memory Beats 27.75 %)
counter๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด ๋ด์ ์กด์ฌํ๋ ์์๋ค์ ํ์๋ฅผ ์ป์ ํ (Hash Table์ ์ฌ์ฉํ counting) ์ด๋ฅผ key๊ฐ์ผ๋กํ์ฌ ์ ๋ ฌํ์์ ๋ ์ฒซ ๋ฒ์งธ ๊ฐ์ ๋ฐํ. ํ์ง๋ง ์ด ํ์ด์ ๊ฒฝ์ฐ์๋ memory์ ์ฌ์ฉ์ด O(n)์ด๊ณ runtime complexity์ ๊ฒฝ์ฐ hash map insertion์ ๋ณต์ก๋๋ฅผ ๋ฐ๋ผ O(n)์ด๋ค.
from collections import Counter
class Solution:
def majorityElement(self, nums: List[int]) -> int:
counter = Counter(nums)
sorted_counter = sorted(counter.keys(), key= lambda x: counter[x], reverse=True)
return sorted_counter[0]
์ด ์ธ์๋ sorting์ ๋จผ์ ํ ๋ค์ indexing์ผ๋ก ์ฐพ๋ ๋ฐฉ๋ฒ๋ฑ์ ํ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค.
๐ Followup Question :
๋ณธ ๋ฌธ์ ๋ฅผ linear time O(n) ๋ด์ O(1) space๋ง ์ฌ์ฉํด์ ํ ์ ์๋๊ฐ?
๐ Boyer-Moore Voting ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ๋ฐฉ๋ฒ
marjority์ ํด๋นํ๋ ์์๋ฅผ +1 , ์๋ ๊ทธ์ธ์ ์์๋ฅผ -1์ด๋ผ๊ณ ํ์ ๋, ์ด๋ค ์ ์ฒด์ ํฉ์ ์์๋ฅผ ๋ง์กฑํด์ผํ๋ค. ๋ฐ๋ผ์ ๋ฐฐ์ด์ ์ํงํ๋ฉด์ majority ๊ฐ์ ํ๋ณด๋ฅผ ์์๋ก ์ ํ๊ณ ์ด๋ค์ ๊ฐ์๋ฅผ ์ธก์ ํ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
majority ๊ฐ์ ํ๋ณด๋ฅผ ๋ง๋๋ฉฐ +1, ์๋๋ฉด -1์ ํ๋ ๋ณ์ count๊ฐ ์ฃผ์ด์ง๋ค๊ณ ํ์. ๋ณธ ์๊ณ ๋ฆฌ์ฆ์ count = 0์ธ ๊ฒฝ์ฐ ํ๋ณด ๊ฐ์ ์ ๋ฐ์ดํธํ๊ณ , ํด๋น ํ๋ณด๋ฅผ ๋ง๋๋ฉด +1, ์๋๋ฉด -1์ ํ๋ฉฐ 0์ด ๋๋๊ฒฝ์ฐ ํ๋ณด ๊ฐ์ ์ ๋ฐ์ดํธํ๋ค. ์ด๋ฅผ ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
class Solution:
def majorityElement(self, nums: List[int]) -> int:
count = 0
for num in nums:
if count == 0:
candidate = num
if num == candidate:
count += 1
else:
count -= 1
return candidate
'IN DEPTH CAKE > Supercoder' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ฉ/LeetCode150-(7)] Best Time to Buy and Sell Stock (121) (0) | 2023.08.20 |
---|---|
[์ฝ๋ฉ/LeetCode150-(6)] Rotate Array (189) (0) | 2023.08.20 |
[์ฝ๋ฉ/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-(2)] Remove Element (27) (1) | 2023.08.17 |