๋ณธ ๊ธ์ 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
๐ LeetCode 75 / Code Signal ํ์ด ๋ณด๋ฌ๊ฐ๊ธฐ