Super Kawaii Cute Cat Kaoani
본문 바로가기
{Algortihm}/Java

[프로그래머스] 주사위 게임 3 - JAVA

by wonee1 2026. 3. 5.
728x90

 

 

 

 

숫자 4개의 등장 횟수, 즉 빈도수를 Map으로 세고 서로 다른 숫자의 개수는 map.size()를 사용해서 나눈다는 것이 문제의 키포인트입니다. 

 

map.size() 의미
1 4개 다 같음
2 3+1 또는 2+2
3 2+1+1
4 전부 다름

 

 

 

 

 

 

 

 

문제 풀이 

import java.util.*;

class Solution {
    public int solution(int a, int b, int c, int d) {
        int answer = 0; 
        int[] arr= {a,b,c,d}; 
        Arrays.sort(arr); // 일단 배열 정렬한 다음에 진행 
        
        Map<Integer, Integer> map = new HashMap<>();
        
        //빈도수 세기 
        map.put(a, map.getOrDefault(a,0) + 1);  // a가 이미 map에 있으면 가져오고 없으면 디폴트 값으로 0 
        map.put(b, map.getOrDefault(b,0) + 1); 
        map.put(c, map.getOrDefault(c,0) + 1); 
        map.put(d, map.getOrDefault(d,0) + 1); 
        
        if(map.size() ==1 ) return a * 1111; //숫자 4개가 모두 같을 때 
        if(map.size() ==2 ) { // 사이즈가 2일 때 
            
            if(map.containsValue(3)){ // 3번 나온 숫자가 있는 경우  
               for(Map.Entry<Integer, Integer> el : map.entrySet()){ //entrySet은 key와 Value를 한쌍으로 묶은 집합 반환 
                    answer += el.getKey() * (el.getValue() == 3 ? 10 : 1);//세 번 나온 숫자면 10, 아니면 1 
               }
                    return answer * answer; // 제곱 
                   
            }
            
            int x =(a+b+c+d-2*a)/2;// 전체합으로 다른 숫자 구하기 (2개씩 같은 숫자일때)
            return (a+x) * Math.abs(a-x); //abs는 절대값 
            
        }
    
        if(map.size() ==3){
            answer =1; 
            
            for(Map.Entry<Integer, Integer> el : map.entrySet()){
                if (el.getValue() != 2) answer *= el.getKey(); // 값이 같은 것이 2개 있지 않다면 그냥 남은 다른 수끼리 곱한다 
            }
            
            return answer;
            
        }
     
            return Math.min(Math.min(a, b), Math.min(c, d)); // 숫자가 다 다르면 가장 작은 숫자가 점수로 체킹됨            
    }        
}

 

 

빈도수 세기는 코테에서 자주 나오는 패턴이니 외우기 

map.put(a, map.getOrDefault(a,0) + 1);

 

 

 

containsValue(3)

 

map.containsValue(3)

 

값 중에서 3번 나온 경우가 있는 지 체킹할 때 containsValue 함수로 확인합니다. 

 

 

 

entrySet() + for문

for(Map.Entry<Integer, Integer> el : map.entrySet())

 

map.entrySet()은 key, value 묶음을 전부 가져온다는 것입니다. 따라서 Map.Entry<Integer,Integer> 은  하나의 Key valu쌍입니다. 

 

=> map 안에 있는 (key,value) 묶음을하나씩 el에 담아서 반복하는 것 

 

 

 

⭐for (타입 변수 : 집합) 

 => 집합 안의 요소를 하나씩 꺼내서 변수에 담고 반복하는 문법 

for (String item : list) { System.out.println(item); }

 

보통 집합 순회 해야 할 때 많이 사용한다

 

728x90