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
입출력 예
k tangerine result
6 [1, 3, 2, 5, 4, 5, 2, 3] 3
4 [1, 3, 2, 5, 4, 5, 2, 3] 2
2 [1, 1, 1, 1, 2, 2, 2, 3] 1
입출력 예 #2
경화는 크기가 2인 귤 2개와 3인 귤 2개 또는 2인 귤 2개와 5인 귤 2개 또는 3인 귤 2개와 5인 귤 2개로 귤을 판매할 수 있습니다. 이때의 크기 종류는 2가지로 이 값이 최소가 됩니다.
입출력 예 #3
경화는 크기가 1인 귤 2개를 판매하거나 2인 귤 2개를 판매할 수 있습니다. 이때의 크기 종류는 1가지로, 이 값이 최소가 됩니다.
k가 주어졌을 때, 크기가 서로 다른 종류 수의 최솟값을 반환해야한다.
크기 종류 수의 최솟값을 반환하려면 종류의 최댓값을 구해서 정렬한 뒤 k개수 만큼 카운트하고 반환하면 될 것 같았다.
def solution(k, tangerine): # k = 귤의 개수, tangerine = 귤의 크기를 담은 배열
num_list = {}
for num in tangerine: # num = 1
if num not in num_list:
num_list[num] = 1
else:
num_list[num] += 1
sorted_num_list = sorted(num_list.items(), key=lambda x: x[1], reverse=True)
count = 0
result = 0
for i in sorted_num_list:
count += i[1]
result += 1
if count >= k:
return result
풀이
빈 딕셔너리 num_list를 선언해준 뒤 배열을 순회하면서 각 귤의 크기를 세어서 딕셔너리에 저장
num_list = { key : 귤의 크기, value : 귤이 몇 개인지 }
sorted_num_list = sorted(num_list.items(), key=lambda x: x[1], reverse=True)
=> sorted()함수의 key매개변수에 lambda함수를 사용하여 귤의 개수를 기준으로 정렬하기 위해서 정렬기준을 x[1]로 설정했다.
(귤의 크기, 귤의 개수)인 튜플 형태로 내림차순 저장
내림차순으로 정렬된 튜플을 순회하면서 귤의개수를 count변수에 종류가 많은 순서대로 넣어준다.
result 값도 1씩 증가시킨다.
count값이 k와 같거나 커지는 if문을 걸어서 result를 반환하도록 작성
'코딩테스트' 카테고리의 다른 글
프로그래머스 - 이진수 더하기 (2) | 2023.04.21 |
---|---|
프로그래머스 - 둘만의 암호 (0) | 2023.04.21 |
프로그래머스 - 직사각형 넓이 구하기 (0) | 2023.04.20 |
프로그래머스 5레벨 - 방의 개수 <그래프> (0) | 2023.04.19 |
프로그래머스 - 숫자 찾기/문자열 정렬하기(2)/머쓱이보다 키 큰 사람 (0) | 2023.04.03 |