๋ฌธ์
๋ฆฟ์ฝ๋ 1338. Reduce Array Size To The Half
https://leetcode.com/problems/reduce-array-size-to-the-half/description/
์ฝ๋
class Solution(object):
def minSetSize(self, arr):
answer = 0
count_num = {}
for num in arr:
if num not in count_num.keys():
count_num[num] = 1
else:
count_num[num] += 1
values = sorted(list(count_num.values()))
while sum(values) >= len(arr)//2:
values.pop()
answer += 1
return answer
ํ์ด
answer = 0
count_num = {}
for num in arr:
if num not in count_num.keys():
count_num[num] = 1
else:
count_num[num] += 1
answer์ ์ต์ข ์ ์ผ๋ก ๋ฐํํ ๋ณ์๋ก์จ, ์ ๋ฐ ์ด์์ ์ ๊ฑฐํ๊ธฐ ์ํด ํ์ํ ์ต์ํ์ ์ ์ ์งํฉ ํฌ๊ธฐ๋ฅผ ๋ด์ ๋ณ์์ด๋ค.
count_num์ arr ๋ฐฐ์ด ์์ ๊ฐ ์ซ์๋ค์ด ๋ช๊ฐ ๋์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ๋ด์ ํด์๋ค.
for๋ฌธ์ ํตํด arr์ ์์๋ค ๊ฐ๊ฐ์ ๋๋ฉด์
count_num ํด์์ ํด๋น ์์๋ฅผ ์ผ ์ ์๋ค๋ฉด count_num[ํด๋น์์]์ ๋ฐธ๋ฅ ๊ฐ์ 1 ๋ก ์ด๊ธฐํํ๊ณ ,
ํด๋น ์์๋ฅผ ์ผ ์ ์๋ค๋ฉด count_num[ํด๋น์์]์ ๋ฐธ๋ฅ๊ฐ์ 1 ๋๋ฆฐ๋ค.
values = sorted(list(count_num.values()))
๋น๋์ ๋ฆฌ์คํธ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ์ด์ ๋ ๋ฐฐ์ด์ ๋ง์ง๋ง ์์๋ถํฐ ๊ฐ์ฅ ์์ฃผ ๋์ค๋ ์๋ฅผ ์ฐจ๋ก๋ก pop()ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
while sum(values) >= len(arr)//2:
values.pop()
answer += 1
๋น๋์ ๋ฐฐ์ด ์์๋ค์ ํฉ์ด ์๋ ์ฃผ์ด์ง arr์ ์์ ๊ฐฏ์์ ์ ๋ฐ ๋ฐ์ผ๋ก ๋ด๋ ค๊ฐ๋ฉด ๋ค์์ ์์ ์ ์ค๋จํ๋ค.
๊ฐ์ฅ ํฐ ๋น๋์ ๋ถํฐ ์ฐจ๋ก๋ก popํ๊ณ , popํ ๋๋ง๋ค answer์ 1 ๋๋ฆฐ๋ค.
๋ค๋ฅธ ์ฝ๋
๊ฐ์ ์คํฐ๋์์ด์ ์งํ๋์ ์ฝ๋์ด๋ค.
from collections import Counter
class Solution:
def minSetSize(self, arr: [int]) -> int:
count_list = Counter(arr).most_common()
total = 0
count = 0
for _, list_count in count_list:
total += list_count
count += 1
if total >= len(arr) // 2:
return count
ํ์ด
์ ์ฝ๋์ ๋น์ทํ ํ๋ฆ์ด์ง๋ง, ์ด ์ฝ๋์์ ํ์ด์ฌ์ Counterํด๋์ค์ most_commonํจ์๋ฅผ ํ์ฉํ์๋ค.
count_list = Counter(arr).most_common()
Counter๋ชจ๋์ ์ด์ฉํ์ฌ ๊ฐ ์์๋ค์ด ๋ช๋ฒ ๋์๋์ง์ ๋ํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ,
most_common()์ ์ด์ฉํด์ ๊ฐ์ฅ ๋ง์ด ๋์จ ๋น๋์ ์ฐจ๋ก๋ก ์ ๋ ฌํ๋ค.
ex) arr = [3, 3, 3, 5, 5, 3, 5, 2, 2, 7] ์ด๋ผ๋ฉด, count_list = [(3, 4), (5, 3), (2, 2), (7, 1)] ์ด๋ค.
for _, list_count in count_list:
total += list_count
count += 1
if total >= len(arr) // 2:
return count
count_list์ ๊ฐ๊ฐ์ ์์ดํ ๋ค์ ์ฐจ๋ก๋ก total์ ๋ํจ๊ณผ ๋์์ count์ ์ซ์๋ 1 ๋๋ ค์ค๋ค.
๋ง์ฝ total์ด ์ฃผ์ด์ง ์ซ์์ ์์ ๊ฐฏ์์ ์ ๋ฐ ์ด์์ด ๋๋ฉด
count๋ฅผ ๋ฐํํ๊ณ ํจ์๋ ์ข ๋ฃ๋๋ค.
์๋กญ๊ฒ ๋ฐฐ์ด์ / ๋๋์
- Counter ํด๋์ค
- collection ๋ชจ๋์ Counter ํด๋์ค๋ ๋ฐฐ์ด์ ์ธ์๋ก ๋ฐ์์ ๊ฐ ์์๊ฐ ๋ช๋ฒ์ฉ ๋์ค๋์ง ์ ์ฅ๋ ๋์ ๋๋ฆฌ ํํ์ ๊ฐ์ฒด๋ฅผ ์ป๊ฒ๋๋ค.
- ์๊ฐ๋ณต์ก๋๋ O(n) ์ด๋ค.
- most_common() ํจ์
- ์์์ ๊ฐ์๊ฐ ๋ง์ ์์ผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ฆฌํดํ๋ค.
- ์ฌํฏ๋์ ํด์๋ฅผ ์ด์ฉํด์ ์์์ ๊ฐ์๋ค์ ์์๋ดค์๋๋ฐ, counter ํด๋์ค๋ฅผ ์๊ฒ ๋์๋ค. ์๊ฐ๋ณต์ก๋๋ ํด์์ ๊ฐ์ผ๋ ์์ผ๋ก๋ ์์์ ๋น๋๋ฅผ ์ธ์๋ฆด๋ Counterํด๋์ค์, ์ต๋น๋๊ฐ์์ผ๋ก ๋์ดํ ์ most_common() ํจ์๋ ์ฌ์ฉํ๋ฉด ์ข์๊ฒ ๊ฐ๋ค.
๋ค๋ฅธ ์๊ฒฌ์ด๋ ๊ถ๊ธํ์ ๊ฒ ์๋ค๋ฉด ํธํ๊ฒ ๋๊ธ ๋ฌ์์ฃผ์ธ์ :)
'์ฝ๋ฉํ ์คํธ๐ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 14888. ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (2) | 2024.07.14 |
---|---|
[๋ฐฑ์ค] 1012. ์ ๊ธฐ๋ ์๋ฐฐ์ถ (2) | 2024.07.14 |
[๋ฆฟ์ฝ๋] Seat Reservation Manager (0) | 2024.06.26 |
[๋ฆฟ์ฝ๋] Minimum Add to Make Parentheses Valis (0) | 2024.06.25 |
[๋ฆฟ์ฝ๋] Removing Stars From a String (0) | 2024.06.24 |