

- 문제를 보고 Counter가 바로 생각났다. 입력값이 리스트로 주어지고, 그 리스트에서 각 요소의 출현 횟수를 알고자 할땐 Counter를 쓰면 편하다.
from collections import Counter
def solution(k, tangerine):
res = 0
temp = 0
counter = Counter(tangerine)
sorted_count = counter.most_common()
for item, count in sorted_count:
if temp < k:
res += 1
temp += count
return res
- counter = Counter(tangerine)은 tangerine리스트에 담긴 요소들의 출현 횟수를 딕셔너리 형식으로 저장 할 것이다. 예를 들어, 주어진 리스트가 [1, 3, 2, 5, 4, 5, 2, 3]라면 counter 변수에는 {3: 2, 2: 2, 5: 2, 1: 1, 4: 1} 와 같이 저장된다. 이 결과는 Counter 객체의 요소를 저장하는 방식이다. Counter는 요소를 키로, 빈도를 값으로 가지는 딕셔너리 형태로 저장한다.
- 다음으로, 우리가 하고 싶은건 k보다 작은 만큼 귤의 종류를 리턴 하는것이기 때문에 리스트를 순회하며 검사 할 수 있도록 정렬을 해주었다. counter.most_common() 메서드는 현재 저장된 키:출현횟수 쌍에서 출현 횟수를 기준으로 정렬을 수행한다. 단, 여기서의 정렬은 오름차순 정렬이 아니라 이름 그대로(most_common은 '가장 흔한'이다) 가장 많이 나온 순서대로 내림차순 정렬을 수행한다. 이렇게 되면 위의 예시에서 [(3, 2), (2, 2), (5, 2), (1, 1), (4, 1)] 이렇게 리스트 안에 튜플 형태로 반환한다.
- 이렇게 하면 이제 이 정렬된 리스트를 k보다 작을때까지 순회하면 된다.
- for item, count in sorted_count는 sorted_count에 저장된 (키:출현 횟수)를 각각 item, count에 할당한다.
- 반복문을 순회하며 현재 값이 k보다 작은지 확인 한 후, 작으면 계속하고, 아니라면 return을 하고 함수를 끝낸다
'CodingTest > 프로그래머스' 카테고리의 다른 글
완전탐색 - Itertools (0) | 2024.10.18 |
---|---|
[프로그래머스] 타겟 넘버 (0) | 2024.08.05 |
[프로그래머스]게임 맵 최단거리 (0) | 2024.08.05 |
[프로그래머스] 할인 행사 (0) | 2024.08.03 |
[프로그래머스] 짝지어 제거하기 (0) | 2024.08.02 |