[프로그래머스/C++ 문제 풀이] Lv. 2 - 귤 고르기

2024. 8. 30. 14:45·코딩테스트/프로그래머스 (Lv. 2)
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

입출력 예

 

입출력 예 #1

  • 본문에서 설명한 예시입니다.

입출력 예 #2

  • 경화는 크기가 2인 귤 2개와 3인 귤 2개 또는 2인 귤 2개와 5인 귤 2개 또는 3인 귤 2개와 5인 귤 2개로 귤을 판매할 수 있습니다. 이때의 크기 종류는 2가지로 이 값이 최소가 됩니다.

입출력 예 #3

  • 경화는 크기가 1인 귤 2개를 판매하거나 2인 귤 2개를 판매할 수 있습니다. 이때의 크기 종류는 1가지로, 이 값이 최소가 됩니다.

문제 풀이

이번 문제는 k개의 귤을 포장하는데 서로 다른 크기의 수를 최소화해야 하는 문제입니다.

 

즉, 우선적으로 <크기, 개수>를 분류한 이후 개수가 가장 많은 종류부터 차례대로 포장하는 방식으로 문제를 해결하였습니다.

 

저의 경우 <크기, 개수>별로 구분하기 위해 map 컨테이너를 사용했으며, 비교 정렬 함수(Comp)를 만들어 많은 수로 정렬하는 방식으로 문제에 접근하였습니다.

정답 코드

더보기

풀이 시간 : 12m 48s

#include <string>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

bool Comp(int p1, int p2)
{
    return p1 > p2;
}

int solution(int k, vector<int> tangerine) {
    int answer = 0;
    
    // 귤을 크기별로 분류하기 위한 map 컨테이너 (크기, 수)
    map<int, int> nums;
    
    // 귤을 크기별로 분류합니다.
    for (int n : tangerine)
    {
        if (nums.find(n) == nums.end())
        {
            nums.insert(make_pair(n, 1));
        }
        else
        {
            nums[n]++;
        }
    }
    
    // 크기별 개수만을 저장하기 위한 vector 컨테이너
    vector<int> tempNum;
    for (pair<int, int> n : nums)
    {
        tempNum.push_back(n.second);
    }
    
    // 수가 많은 순으로 정렬
    sort(tempNum.begin(), tempNum.end(), Comp);
    
    // 결과값 도출
    for (int num : tempNum)
    {
        if (k <= 0) break;
        k -= num;
        answer++;
    }
        
    return answer;
}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 > 프로그래머스 (Lv. 2)' 카테고리의 다른 글

[프로그래머스/C++ 문제 풀이] Lv. 2 - 예상 대진표  (0) 2024.08.29
[프로그래머스/C++ 문제 풀이] Lv. 2 - 영어 끝말잇기  (0) 2024.08.28
[프로그래머스/C++ 문제 풀이] Lv. 2 - N개의 최소 공배수  (0) 2024.08.27
[프로그래머스/C++ 문제 풀이] Lv. 2 - 멀리 뛰기  (0) 2024.08.26
[프로그래머스/C++ 문제 풀이] Lv. 2 - 구명보트  (0) 2024.08.26
'코딩테스트/프로그래머스 (Lv. 2)' 카테고리의 다른 글
  • [프로그래머스/C++ 문제 풀이] Lv. 2 - 예상 대진표
  • [프로그래머스/C++ 문제 풀이] Lv. 2 - 영어 끝말잇기
  • [프로그래머스/C++ 문제 풀이] Lv. 2 - N개의 최소 공배수
  • [프로그래머스/C++ 문제 풀이] Lv. 2 - 멀리 뛰기
리태s
리태s
게임 클라이언트 프로그래머 직무를 준비하며 공부한 내용을 정리한 블로그입니다.
    반응형
    250x250
  • 리태s
    LeeTaes 공부노트
    리태s
  • 전체
    오늘
    어제
    • Home (165)
      • 프로젝트 (20)
        • Isaac 3D (5)
        • TimelessAdventure (13)
        • FruitsPuzzle (2)
      • Game Programming (25)
        • C# (8)
        • Unity Engine (6)
        • Unreal Engine (8)
        • UE_Multiplayer (3)
      • 코딩테스트 (111)
        • 프로그래머스 (Lv. 0) (27)
        • 프로그래머스 (Lv. 1) (31)
        • 프로그래머스 (Lv. 2) (21)
        • 백준 (Study) (29)
        • 알고리즘 (3)
      • CS지식 (7)
        • 운영체제 (7)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    unity
    백준
    timelessadventure
    C++
    issac3d
    구현
    sesac
    tsoftobjectptr
    c#
    unrealengine
    프로세스
    Unreal Engine
    pcce 기출문제
    2019 kakao
    project t.a develop
    ai controller
    Summer/Winter Coding
    프로젝트
    2022 kakao
    프로그래머스
    delegate
    dataasset
    CS지식
    후기
    청년취업사관학교
    Algorithm
    코딩테스트
    fsoftobjectpath
    2018 kakao
    fruitspuzzle
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
리태s
[프로그래머스/C++ 문제 풀이] Lv. 2 - 귤 고르기
상단으로

티스토리툴바