https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다.
예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소일 때입니다.
경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine이 매개변수로 주어집니다. 경화가 귤 k개를 고를 때 크기가 서로 다른 종류의 수의 최솟값을 return 하도록 solution 함수를 작성해주세요.
제한사항
- 1 ≤ k ≤ tangerine의 길이 ≤ 100,000
- 1 ≤ tangerine의 원소 ≤ 10,000,000
문제 해결
from collections import Counter
def solution(k, tangerine):
answer = 0
dic = Counter(tangerine).most_common()
num = 0
for i in dic:
tmp = num
num += i[1]
if num <= k:
answer += 1
elif tmp < k and num >= k:
answer += 1
return answer
문제 풀이 설명
서로 다른 종류의 귤의 개수를 최소화 하는것이 문제의 목표이다.
1) Counter() 함수를 사용해 tangerine 매개변수에서 각 귤의 크기와 해당 크기의 개수를 정의한다.
2) most_common() 함수로 가장 많은 개수를 가진 크기를 list 형태로 가져온다.
3) 해당 리스트를 돌면서, 개수가 k 보다 작다면 해당 크기의 귤을 모두 가져간다.
4) 리스트를 돌때 k 보다는 낮지만 해당 크기의 귤을 일부분 가져가야 할때, 결국 귤의 종류가 늘어나는 것이므로 해당 경우를 정의한다.
사용된 개념(Counter, most_common())
Counter 클래스는 Collections 모듈에서 import 해야 사용할 수 있다.
from collections import Counter
이때 카운터는 대문자로 시작하는 것을 까먹으면 안된다.
import 하면 Counter 클래스를 사용할 수 있는데, 중복된 데이터가 저장된 리스트를 인자로 주었을 때 각 원소가 몇 번씩 나오는지 저장된 객체를 얻을 수 있다. dictionary를 지원하기 때문에, 해당 함수 또한 모두 사용할 수 있다.
most_common() 함수는 데이터의 개수가 많은 순으로 정렬된 리스트를 리턴한다.
인자로 숫자 n을 입력하면 n만큼만 리턴할 수도 있다. 예로 가장 개수가 많은 데이터 한 개만 궁금할 때,
most_common(1)을 입력하면 알 수 있다.
'알고리즘(python) > 프로그래머스(python)' 카테고리의 다른 글
[프로그래머스] LV.2 위장(python) (2) | 2023.03.19 |
---|---|
[프로그래머스] LV.2 행렬의 곱셈(python) (0) | 2023.03.19 |
[프로그래머스] LV.2 [1차] 캐시(python) (0) | 2023.03.15 |
[프로그래머스] LV.2 H-Index(python) (0) | 2023.03.11 |
[프로그래머스] LV.2 멀리 뛰기(python) (0) | 2023.03.11 |