프로그래머스 2단계 : 귤 고르기 (Java 자바)

2023. 8. 28. 00:21·💻 코딩테스트/programmers
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. 귤의 사이즈별로 중복 갯수를 저장하기 위해 HashMap 사용 (key: 귤 사이즈, value: 사이즈별 갯수)

2. key가 존재하면 value에 1을 더하고 저장 getOrDefault()

3. 사이즈별 리스트 생성 ArrayList

4. 내림차순 카운트 (람다식에서 많이 쓰는 방식인 듯? 추후 정리)

5. 상자에 담은 k 최솟값

* 귤의 크기(key)와 크기별 중복 갯수(value)를 Map에 저장하여, 개수가 많은 순 부터 k개를 채우는 문제

 

import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;

class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;

        // 귤 사이즈: key, 사이즈별 갯수: value
        Map<Integer, Integer> size = new HashMap<Integer, Integer>();
        
        // 귤 사이즈별로 중복갯수 +1
        for (int i = 0; i < tangerine.length; i++) {
            int sizeMap = tangerine[i];
            size.put(sizeMap, size.getOrDefault(sizeMap, 0) + 1);
        }
        
        // 사이즈별 list
        List<Integer> keyList = new ArrayList<>(size.keySet());
        
        // 중복 갯수를 기준으로 내림차순
        keyList.sort((o1, o2) -> size.get(o2) - size.get(o1));
        
        // 4. k의 개수만큼 상자에 담으며 최소값 추출
        int i = 0;
        while(k > 0){
            k -= size.get(keyList.get(i));
            answer++;
            i++;
        }
        return answer;
    }
}
728x90

'💻 코딩테스트 > programmers' 카테고리의 다른 글

프로그래머스 3단계 : 최고의 집합 (Java 자바)  (1) 2023.08.28
프로그래머스 3단계 : 이중우선순위큐 (Java 자바)  (0) 2023.08.28
프로그래머스 3단계 : 네트워크 (Java 자바)  (0) 2023.08.26
프로그래머스 3단계 : 정수 삼각형 (Java 자바)  (0) 2023.08.26
프로그래머스 2단계 : 최댓값과 최솟값 (Java 자바)  (0) 2023.08.26
'💻 코딩테스트/programmers' 카테고리의 다른 글
  • 프로그래머스 3단계 : 최고의 집합 (Java 자바)
  • 프로그래머스 3단계 : 이중우선순위큐 (Java 자바)
  • 프로그래머스 3단계 : 네트워크 (Java 자바)
  • 프로그래머스 3단계 : 정수 삼각형 (Java 자바)
gxxg
gxxg
함께 일하고 싶은 개발자를 꿈꾸는 예비개발자의 공부 기록
  • gxxg
    공공
    gxxg
  • 전체
    오늘
    어제
    • 분류 전체보기 (138)
      • ☁️ 구름 x 카카오 Deep Dive 풀스택 (7)
        • html, css (1)
        • Java (3)
        • 스프링 MVC (0)
      • 💻 코딩테스트 (89)
        • 백준 (2)
        • programmers (87)
      • SQLD (1)
      • Language (3)
        • Java (2)
        • JavaScript (1)
      • Style Sheet (0)
        • CSS (0)
        • SCSS & SASS (0)
      • DBMS (2)
        • Oracle (2)
        • MySQL (0)
        • postgresql (0)
        • 데이터베이스 기초 이론 (0)
      • React (0)
      • SpringBoot (0)
      • JSP (2)
      • 알고리즘 (0)
      • 2023-02 몰입형 SW 정규 교육 (24)
        • 9월 프로젝트 (8)
      • 벽돌깨기 (4)
      • Etc (4)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로젝트 구조
    javascript
    DFS
    junit 테스트
    3단계
    이클립스
    JSP
    톰캣
    LV3
    티스토리챌린지
    2단계
    코테
    programmers
    자바
    구현체
    자바스크립트
    프로그래머스
    springboot
    spring
    Lv2
    CSS
    0단계
    eclipse
    Lv0
    코딩테스트
    회원 관리 시스템
    java
    HTML
    오블완
    POST
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gxxg
프로그래머스 2단계 : 귤 고르기 (Java 자바)
상단으로

티스토리툴바