[Java | Algorithm] 프로그래머스 Lv2 - 귤 고르기

2024. 11. 21. 20:29·알고리즘

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

1) 문제 설명

 

2) 접근 방식

HashMap 활용을 활용하여 귤의 크기가 많을수록 해당 크기를 우선적으로 선택하여 k를 빠르게 감소시키고
높은 빈도수부터 선택하면 귤 종류를 최소화할 수 있게 풀려고 했습니다.

3) 풀이

import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        
        HashMap<Integer, Integer> map = new HashMap<>(); 
        
        for(int i : tangerine){
            map.put(i, map.getOrDefault(i, 0) + 1);
        }
        
        List<Integer> list = new ArrayList<>(map.keySet());
        
        list.sort((o1, o2) -> map.get(o2) - map.get(o1));
        
        for(int i : list){
            k -= map.get(i);
            answer ++;
            
            if(k <= 0) break;
        }
        
        return answer;
    }
}

 

1. 귤 크기별로 빈도수 저장

  • HashMap<Integer, Integer>을 사용하여 귤의 크기와 해당 크기의 개수를 저장합니다.
  • 키는 귤의 크기, 값은 해당 크기의 빈도수입니다.
  • ex) 귤 크기 배열이 [1, 3, 2, 5, 4, 5, 2, 3]일 경우, 생성된 맵은 {1=1, 3=2, 2=2, 5=2, 4=1}가 됩니다.

getOrDefault는 Java의 Map 인터페이스에서 제공하는 메서드입니다.
주어진 키에 대해 값을 조회하거나, 키가 없을 경우 기본값을 반환하는 기능을 합니다.

 

동작 방식

  1. 지정된 키(key)가 맵에 존재하면 해당 키의 값을 반환합니다.
  2. 지정된 키가 맵에 존재하지 않으면 기본값(defaultValue)을 반환합니다.

2. 빈도수를 기준으로 내림차순 정렬

  • 맵의 키들을 리스트로 변환한 후, 각 키에 해당하는 빈도수를 기준으로 내림차순 정렬합니다.
  • ex) 위 맵의 경우, 내림차순 정렬된 리스트는 [3, 2, 5, 1, 4]가 됩니다.

 

3.최소한의 귤 종류로 k개 선택

  • 정렬된 리스트를 순회하며 높은 빈도수부터 k에서 빼줍니다.
  • 귤 종류를 하나 추가할 때마다 answer를 증가시킵니다.
  • k가 0 이하가 되는 순간 반복을 종료하고 answer를 반환합니다.

정리

HashMap에 대해서 공부했던 적이 있어서 쉽게 풀 수 있었습니다.

자료 구조 공부의 중요성!!

 

'알고리즘' 카테고리의 다른 글

[Java | Algorithm] 프로그래머스 Lv2 - 124 나라의 숫자  (1) 2024.12.14
[Java | Algorithm] 프로그래머스 Lv2 - 양궁대회  (2) 2024.11.25
[Java | Algorithm] 프로그래머스 Lv2 - 튜플  (3) 2024.11.18
[Java | Algorithm] 백준 11404 - 플로이드  (0) 2024.11.14
[Java | Algorithm] 백준 7569 - 토마토  (2) 2024.11.11
'알고리즘' 카테고리의 다른 글
  • [Java | Algorithm] 프로그래머스 Lv2 - 124 나라의 숫자
  • [Java | Algorithm] 프로그래머스 Lv2 - 양궁대회
  • [Java | Algorithm] 프로그래머스 Lv2 - 튜플
  • [Java | Algorithm] 백준 11404 - 플로이드
코딩 거북이
코딩 거북이
느리더라도 꾸준히
  • 코딩 거북이
    99MinSu
    코딩 거북이
  • 전체
    오늘
    어제
    • 분류 전체보기 (29)
      • 일상 및 회고 (1)
      • 자바 (1)
      • 알고리즘 (13)
      • 데이터베이스 (1)
      • 스프링 (3)
      • 프로젝트 (8)
        • 댕댕살롱 (5)
        • 아이북조아 (1)
      • 자격증 (2)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    구독 알림
    백준
    유레카
    프로그래머스
    프로젝트
    FCM
    fcm 주제
    푸시 알림
    Spring
    dfs
    DI
    명예의 전당(1)
    Lombok
    자바
    자격증
    스프링
    Lv2
    알고리즘
    백트래킹
    알림
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
코딩 거북이
[Java | Algorithm] 프로그래머스 Lv2 - 귤 고르기
상단으로

티스토리툴바