반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/138476
- 소요 시간 : 15분
- 난이도 : LV 2
접근 방법
1. 종류별 개수를 센 뒤 많은 순으로 정렬한다.
ex. 1, 3, 2, 5, 4, 2, 3
1: 1개
4: 1개
2: 2개
3: 2개
5: 2개
=> [2, 2, 2, 1, 1]
2. 종류별 개수 리스트를 돌면서 k만큼 가져간다.
ex. k = 6
2+2+2 => 3번째 원소까지 가져갈 수 있다.
ex. k=4
2+2 => 2번째 원소까지 가져갈 수 있다.
풀이
나의 풀이
from collections import defaultdict
def solution(k, tangerine):
count_dict = defaultdict(int)
for t in tangerine:
count_dict[t] += 1
counts = list(count_dict.values())
counts.sort(reverse=True)
answer = 0
for count in counts:
k -= count
answer += 1
if k <= 0:
break
return answer
딕셔너리를 사용하여 개수를 세주었다.
다른 사람 풀이
import collections
def solution(k, tangerine):
answer = 0
cnt = collections.Counter(tangerine)
for v in sorted(cnt.values(), reverse = True):
k -= v
answer += 1
if k <= 0:
break
return answer
로직은 동일하나 Counter 클래스로 딕셔너리를 대체하였다.
https://school.programmers.co.kr/learn/courses/30/lessons/138476/solution_groups?language=python3
나의 풀이 2
from collections import Counter
def solution(k, tangerine):
counts = Counter(tangerine).most_common(k)
answer = 0
for size, count in counts:
k -= count
answer += 1
if k <= 0:
break
return answer
Counter 클래스의 most_common 메소드를 사용해보았다.
정리
Counter 클래스에 대해 알게 되어 정리해보았다.
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 미로 탈출 명령어 - Python (1) | 2024.10.16 |
---|---|
[프로그래머스] 뒤에 있는 큰 수 찾기 - Python (2) | 2024.10.15 |
[백준] 2343. 기타 레슨 - C++ (3) | 2024.10.04 |
[백준] 2792. 보석 상자 - C++ (0) | 2024.10.02 |
[Sofeteer] 징검다리 - C++ (1) | 2024.09.05 |