#1. 문제
#2. 풀이
1. map 컨테이너
Details
map 컨테이너는 C++ STL에서 제공하는 연관 컨테이너로, 키와 값을 한 쌍으로 레드-블랙 트리 자료구조에 저장합니다.
2. 우선순위 큐
Details
priority_queue 컨테이너는 힙 자료구조를 활용해 각 항목에 우선순위를 부여하고, 우선순위를 기준으로 내부적으로 반 정렬된 상태를 유지합니다. priority_queue 컨테이너의 디폴트 정렬 기준은 최대 힙(less)이며, 변경이 가능합니다.
3. map으로 사이즈별 귤 개수 세고, 우선순위 큐로 사이즈 종류 세자
- 먼저, pair<int, int> 형식으로 귤의 사이즈와 개수를 세고, map 컨테이너에 저장
- 다음으로, map 컨테이너를 순회하며 각 사이즈 별 귤 개수를 pq(우선순위 큐)에 삽입합니다.
- 우선순위 큐의 top 항목을 pop 하고, k에서 해당 항목을 차감합니다.
- k가 0이하가 될 때까지, 위 작업을 반복합니다. 최종적으로, 최소 귤의 종류는 pq에서 pop 한 항목의 개수가 됩니다!
#3. 코드
#include <string>
#include <vector>
#include <map>
#include <queue>
using namespace std;
int solution(int k, vector<int> tangerine)
{
int answer = 0;
// #1. map을 통해 크기 별 귤의 개수를 구한다.
map<int, int> m;
for (int i = 0; i < (int)tangerine.size(); ++i)
m[tangerine[i]]++;
// #2. 우선순위 큐에 크기 별 개수를 삽입한다.
priority_queue<int> pq;
for (auto it = begin(m); it != end(m); ++it)
pq.push(it->second);
// #3. 우선순위 큐의 top을 꺼내며, k개수를 차감하며 0이하가 될때 까지 종류를 카운트한다.
while (!pq.empty())
{
int num = pq.top();
pq.pop();
answer++;
k -= num;
if (k <= 0)
break;
}
return answer;
}
'문제 풀이 > Programmers 문제 풀이' 카테고리의 다른 글
[Programmers]#Level2_연속 부분 수열 합의 개수, 투 포인터 알고리즘, set 컨테이너 (1) | 2024.01.06 |
---|---|
[Programmers_C++]#Level2_멀리 뛰기, dp, 동적 프로그래밍 (0) | 2023.12.24 |
[Programmers_C++]#Level2_N개의 최소 공배수, 유클리드 호제법, 최대 공약수, 최소 공배수 (0) | 2023.12.24 |
[Programmers_C++]#Level3_입국 심사, 이분 탐색 (0) | 2023.12.14 |
[Programmers_C++]#Level2_타겟 넘버, DFS, 재귀 호출 (0) | 2023.12.13 |