알고리즘/프로그래머스
Programers 귤 고르기 / C++
내이름은 킹햄찌
2022. 12. 3. 13:33
https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
아이디어
고른 귤의 종류가 최소가 되는 방법은 가장 개수가 많은 귤에서부터 고르는 기회를 소진시키면 됩니다.
귤과 고르는 기회를 곱하여 0이 될때 한 종류의 과일을 다고르거나 더이상 귤고르는 기회가 없을때 2가지 조건을 모두 충족시키는 조건문이 되는데, 해당 조건을 코드로 풀어낸게 문제의 히트요소입니다.
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
int solution(int k, vector<int> tangerine) {
int answer = 0;
int sum = 0;
unordered_map<int, int> m;
vector<pair<int, int>> v;
unordered_map<int, int>::iterator iter;
for (auto iter : tangerine) m[iter]++;
for (iter = m.begin(); iter != m.end(); iter++) v.push_back({ iter->first, iter->second });
sort(v.begin(), v.end(),
[](pair<int, int> a, pair<int, int> b)->bool {
return a.second > b.second; });
for (auto iter : v) {
if (k < 1) break;
answer++;
//귤과 k를 곱해서 0이 될때는 한 종류의 과일을 다 고르거나 더 이상 고를 수 없을때
while (iter.second*k) {
k--;
iter.second--;
}
}
return answer;
}