Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로세스 주소 공간
- B tree 데이터삽입
- 갤럭시 S24
- 반효경
- BreadcrumbsComputer-Networking_A-Top-Down-Approach
- vite
- CPU 스케줄링
- concurrency control
- 시스템프로그래밍
- 커널 동기화
- 데이터베이스
- 온디바이스AI
- 쉬운코드
- recoverability
- SQL
- 개발남노씨
- 트랜잭션
- Git
- 코딩애플
- SDK
- Extendable hashing
- 인터럽트
- 코딩테스트 [ ALL IN ONE ]
- 김영한
- 백엔드
- 네트워크
- 운영체제와 정보기술의 원리
- 운영체제
- 시그널 핸들러
- 쉬운 코드
Archives
- Today
- Total
티끌모아 태산
⭐귤 고르기 본문
728x90
문제 설명
경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 '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에서 빼준다. 그리고 k <= 0 이되면 반복을 멈춰서 최소 개수를 출력하면 된다.
각 원소마다 몇 개인지 확인하는 라이브러리 Counter() 활용하면 편하다.
- 귤 개수를 추가할 딕셔너리 만들고 value 추가하기, Counter() 사용
- 귤 개수 더해가며 k개 맞추기, 빼가면서 맞추기
*개수를 찾을 때, 더하는 방식보다는 빼는 방식이 간단한 경우가 있다.
코드 구현
from collections import Counter
def solution(k, tangerine):
arr = Counter(tangerine)
# print(arr) Counter({3: 2, 2: 2, 5: 2, 1: 1, 4: 1})
# 정렬하기
arr = sorted(arr.items(), key=lambda x: x[1], reverse=True)
# print(arr) [(3, 2), (2, 2), (5, 2), (1, 1), (4, 1)]
# 정렬된 딕셔너리로 귤 개수 맞추기
answer = 0
for i in arr:
k -= i[1] # 귤의 개수를 뺀다.
answer += 1
if k <= 0:
break
return answer
728x90