귤 고르기

2025. 5. 30. 11:06·코딩 테스트/프로그래머스

문제

문제 풀이

1. 귤을 상자에 문제에서 제시한 수(k)만큼 담았을 때, 크기의 종류가 최소한이 되는 경우(Answer)를 반환하는 문제.

2. 전달받은 귤 크기대로 숫자를 세기 위해서 map<int, int>에 크기별 개수를 기록한다.

3. 크기별 개수를 정렬을 위해서 vector에 넣는다. 상자에 넣을 때, 종류의 값이 중요하지 않기 때문에 개수만 vector에 기록하는 것이다.

4. 많은 개수부터 상자에 넣기 위해서 내림차순 정렬 수행

5. 정렬된 vector의 원소별로 순회하며 귤 수를 담아준다. 반복의 시작에서 현재 박스에 들어가 있는 귤 수가 k보다 크면 반복을 멈추게 하고, 아니라면 Answer를 1개 증가(종류를 1개 증가)시키고 현재 Box에 해당 종류의 귤을 담았다 가정하여 해당 크기의 갯수만큼(해당 Index의 귤 수) 더해준다. 

 

코드

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

using namespace std;

int solution(int k, vector<int> tangerine) 
{
    // 귤을 크기별로 분류하여 개수를 센다
    map<int, int> MapTangerine;
    for(int& Tan : tangerine)
    {
        ++MapTangerine[Tan];
    }
    
    // 상자에 개수가 많은 종류부터 담으면 
    // 상자에 담긴 종류가 최소화 되므로
    // 종류별 개수를 배열에 담아 내림차순으로 정렬해준다.
    vector<int> BigToSmallArray;
    for(auto Pair : MapTangerine)
    {
        BigToSmallArray.push_back(Pair.second);
    }
    
    sort(BigToSmallArray.begin(), BigToSmallArray.end(), greater<int>());
    
    int CountInBox = 0, Answer = 0;
    for(int IDX = 0; IDX < BigToSmallArray.size(); ++IDX)
    {
        // 상자에 담긴 귤 수가 k개 이상이면 꽉찼으니 정지
        if(CountInBox >= k)
        {
            break;
        }
        
        // 종류 수 더해주고
        // 현재 상자에 담긴 귤 수를 갱신한다.
        ++Answer;
        CountInBox += BigToSmallArray[IDX];
    }
    
    return Answer;
}

 

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

멀리 뛰기  (0) 2025.05.29
예상 대진표  (0) 2025.05.28
달리기 경주  (0) 2025.03.24
개인정보 수집 유효기간  (0) 2025.03.13
바탕화면 정리  (0) 2025.03.11
'코딩 테스트/프로그래머스' 카테고리의 다른 글
  • 멀리 뛰기
  • 예상 대진표
  • 달리기 경주
  • 개인정보 수집 유효기간
DevJoo1120
DevJoo1120
  • DevJoo1120
    Jin's Programming
    DevJoo1120
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • 포트폴리오 (7)
        • Castlevania: Aria of Sorrow.. (7)
        • [UE5] KILL Everything (0)
      • C++ (0)
      • 라이브러리 (1)
      • 다이렉트X11 (0)
      • Unreal Engine (11)
        • Unreal Document (1)
        • 이것 저것 (8)
        • UI (1)
      • 자료구조 및 알고리즘 (0)
      • 책 정리 (3)
        • 코딩 테스트 합격자 되기 C++ 편 (10)
      • 코딩 테스트 (32)
        • 프로그래머스 (32)
      • 스파르타 코딩 언리얼 1기 (9)
        • 특강 (0)
        • C++와 Unreal Engine으로 3D .. (2)
      • TIL(Today I Learned) (63)
      • 영어 공부 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    Unreal Engine 5
    코딩 테스트 합격자 되기 c++ 편
    C++
    정리
    배열
    정렬
    프로그래머스
    Study
    문자열
    map
    팀 프로젝트
    Til
    스파르타 코딩 클럽
    과제
    WINAPI
    책 정리
    코딩 테스트
    코딩테스트
    반복문
    이중 반복문
  • hELLO· Designed By정상우.v4.10.5
DevJoo1120
귤 고르기
상단으로

티스토리툴바