본문 바로가기

프로그래머스 문제풀이/LEVEL 2

[C++] 프로그래머스 문제풀이 LEVEL 2 귤 고르기

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/138476?language=cpp 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <bits/stdc++.h>
using namespace std;

bool cmp(std::pair<int, int> lhs, std::pair<int, int> rhs)
{
    return lhs.second > rhs.second;
}
int solution(int k, vector<int> tangerine)
{
    int answer = 0;
    // 1. 귤의 크기별로 몇개 있는지 확인
    std::unordered_map<int, int> sizeCountMap;
    for (int i = 0; i < tangerine.size(); ++i)
    {
        sizeCountMap[tangerine[i]]++;
    }
    // 2. 갯수가 적은 순서대로 배열 후 목표 갯수 만큼 제거
    std::vector<std::pair<int, int>> result;
    result.reserve(sizeCountMap.size());
    for (auto ele : sizeCountMap)
    {
        result.push_back(std::make_pair(ele.first, ele.second));
    }
    std::sort(result.begin(), result.end(), cmp);
    // 3. 갯수가 0이되면 항목 제거
    int iter = tangerine.size() - k;

    while(true)
    {
        if (iter == 0)
        {
            break;
        }
        --iter;
        --result[result.size() - 1].second;
        if (result[result.size() - 1].second == 0)
        {
            result.pop_back();
        }
    }
    // 4. 종류 리턴
    answer = result.size();
    return answer;
}