코테/프로그래머스

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

imname1am 2023. 10. 13. 23:50
반응형

🔺 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.*;
 
class Solution {
    public int solution(int k, int[] tangerine) {
        Map<Integer, Integer> map = new HashMap<>();    // 귤 종류, 갯수
        
        // 1) 귤 종류와 갯수 저장하기
        for(int t : tangerine) {
            map.put(t, map.getOrDefault(t, 0+ 1);
        }
        
        // 2) map, 갯수가 많은 순 (=내림차순) 정렬
        List<Integer> vList = new ArrayList<>(map.values()); 
        vList.sort((o1, o2) -> o2 - o1);
        
        // 3) map 돌면서 가능한 경우의 최솟값 찾기
        int sum = 0;    // 고른 귤 개수
        int min = 0;    // 최솟값
        
        for(int v : vList) {
            if(sum + v >= k) {
                min++;
                break;
            }
            else {
                sum += v;
                min++;
            }
        }
        
        return min;
    }
}
cs

 

🧩  해결 아이디어

• HashMap

1. HashMap을 사용해 <귤 종류, 갯수> 를 저장한다.

2. 귤 종류 중 갯수가 많은 순으로 내림차순으로 정렬한다.

3. map을 돌면서 가능한 경우의 최솟값을 찾는다.

  - 해당 종류의 귤의 갯수가 한 상자에 담으려고 하는 귤의 갯수 k보다

         ㄴ크거나 같다면, 최솟값에 1을 더하고 반복문을 탈출한다.

         ㄴ크기가 작다면, 한 상자에 담을 수 있기 때문에 고른 귤 갯수에 현재 귤 종류의 갯수를 더하고, 귤 종류의 최솟값 갯수에 +1을 한다.

 

 


🔺 다른 풀이들

- 최솟값 찾는 방식이 조금 다르다. 담엔 이렇게 생각해보겠어....

import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        HashMap<Integer,Integer> map =new HashMap<>();

        for (int t : tangerine) {
            map.put(t, map.getOrDefault(t, 0) + 1);
        }

        List<Integer> list = new ArrayList<>(map.keySet());
        list.sort((o1, o2) -> map.get(o2)-map.get(o1));

        for(Integer key : list){
            k -= map.get(key);
            answer++;
            
            if(k <= 0){
                break;
            }
        }

        return answer;
    }
}

 


💬 느낀 점

단순한 걸 참 어렵게 생각해서 못 하는 경향이 있다..

내가 부족한거겠지...

후 코테 올솔하고 싶구나...

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

✔ 풀이 참고

 

[프로그래머스] 귤 고르기(Java, 자바)

귤 고르기해당 문제는 HashMap을 활용해 문제를 해결했습니다.1\. 주어진 배열의 정수를 HashMap의 key값으로 하여 정수의 개수를 저장합니다.2\. 개수로 저장된 value를 ArrayList로 변환해 내림차순으로

velog.io

 

 

✔ HashMap Value 기준 정렬

 

"HashMap"의 "Value" 기준 정렬

import java.util.Map; import java.util.HashMap; import java.util.Collections; import java.util.List; import java.util.Comparator; import java.util.ArrayList; public class Main{ public static void main(String[] args){ Map map = new HashMap(); map.put(1, 0.8

daily-life-of-bsh.tistory.com

 

반응형