우당탕탕 개발일지

[프로그래머스] 귤 고르기 (Java, Lv.2) 본문

코테/프로그래머스

[프로그래머스] 귤 고르기 (Java, Lv.2)

ujin302 2024. 3. 6. 10:34
반응형

문제

귤 k개를 고를 때 크기가 서로 다른 종류의 수의 최솟값 구하기 

입출력 예 

 

풀이

1. Map<귤 크기, 개수> 초기화 

1차 시도 

1) Map<귤의 크기, 0> 초기화 

-> For 문 사용

2) 초기화한 Key값에 대한 개수를 설정 

-> 이중 For문 사용 

 

결과 : 시간 초과로 인한 실패 

 

 

2차 시도

Map<귤의 크기, 개수>로 초기화 

map.getOrDefault(Key, DefaultValue)
  • Key : map에서 값을 가져올 Key 값 
  • DefaultValue : 지정된 키가 존재하지 않을 경우, 해당 값으로 초기화 

=> 지정된 키가 존재하지 않을 경우, 두번쨰 매개변수를 통해 초기화하고 그렇지 않을 경우 해당 Value 반환 

 

 

 

최종  코드 

import java.util.HashMap;
import java.util.ArrayList;
import java.util.Collections;

public class programmersLeve2 {
    public static int solution(int k, int[] tangerine) {
        System.out.println("귤 고르기");
        int answer = 0;
        HashMap<Integer, Integer> mappedSize = new HashMap<>();

        // Map<귤 크기, 개수> 초기화
        // getOrDefault 메소드 : 찾는 Key 값이 없을 경우, 두번째 인수값으로 설정됨.
        for (int i = 0; i < tangerine.length; i++) {
            mappedSize.put(tangerine[i], mappedSize.getOrDefault(tangerine[i], 0) + 1); // 귤 크기, 0
        }

        // // Map<귤 크기, 0> 초기화
        // for (int i = 0; i < tangerine.length; i++) {
        // mappedSize.put(tangerine[i], 0); // 귤 크기, 0
        // }
        // // Map<귤 크기, 개수>
        // for (int key : mappedSize.keySet()) {
        // for (int i = 0; i < tangerine.length; i++) {
        // if (key == tangerine[i]) {
        // int temp = mappedSize.get(key) + 1;
        // mappedSize.put(key, temp);
        // }
        // }
        // }

        // Value 값들을 ArrayList에 저장
        ArrayList<Integer> valuArrayList = new ArrayList<>(mappedSize.values());
        // 내림차순 정렬
        Collections.sort(valuArrayList, Collections.reverseOrder());
        // 다른 종류 개수 찾아내기
        for (int value : valuArrayList) {
            if (k <= 0) {
                break;
            } else
                answer++;
            k -= value;
        }

        return answer;
    }

    public static void main(String[] args) {
        int[] tangerine1 = { 1, 3, 2, 5, 4, 5, 2, 3 };
        System.out.println(solution(1, tangerine1));
    }
}

 

 

 

프로그머스 문제 

https://school.programmers.co.kr/learn/courses/30/lessons/138476

반응형