주사위 게임3 프로그래머스

gotcha!!·2023년 8월 21일
0

코딩테스트

목록 보기
23/36

문제

코드

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

class Solution {
    public int solution(int a, int b, int c, int d) {
        int answer = 6;
        HashMap<Integer, Integer> resultMap = new HashMap<Integer, Integer>();
        
        resultMap.put(a, resultMap.getOrDefault(a, 0) + 1);
        resultMap.put(b, resultMap.getOrDefault(b, 0) + 1);
        resultMap.put(c, resultMap.getOrDefault(c, 0) + 1);
        resultMap.put(d, resultMap.getOrDefault(d, 0) + 1);
        
        
        ArrayList<Integer> key = new ArrayList<Integer>();
        for(Integer dice : resultMap.keySet()) {
            key.add(dice);
        }
        
        int keyLen = key.size();
        if(keyLen == 1) {
            /*
                네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
            */
            answer = 1111 * key.get(0);
        }
        else if(keyLen == 2) {
            
            /*
                세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면                 (10 × p + q)2 점을 얻습니다.
            */
            int dice1 = key.get(0);
            int dice2 = key.get(1);
            
            if((resultMap.get(dice1) == 1 && resultMap.get(dice2) == 3)) {
                
                answer = (int)Math.pow((10 * dice2 + dice1), 2);
            }
            else if((resultMap.get(dice1) == 3 && resultMap.get(dice2) == 1)) {
                answer = (int)Math.pow((10 * dice1 + dice2), 2);
            }
            else if(resultMap.get(dice1) == resultMap.get(dice2)) {
                
                /*
                주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p +                 q) × |p - q|점을 얻습니다.
                 */
                answer = (dice1 + dice2) * Math.abs(dice1 - dice2);
            }
        }
        else if(keyLen == 3) {
            
            /*
            어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른                     q, r(q ≠ r)이라면 q × r점을 얻습니다.
            */
            int dice1 = key.get(0);
            int dice2 = key.get(1);
            int dice3 = key.get(2);
            
            if(resultMap.get(dice1) == 2) {
                answer = dice2 * dice3;
            }
            else if(resultMap.get(dice2) == 2) {
                answer = dice1 * dice3;
            }
            else if(resultMap.get(dice3) == 2) {
                answer = dice1 * dice2;
            }
        }
        else if(keyLen == 4) {
            
            /*
                네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습                   니다.
            */
            
            for(int i = 0; i < keyLen; i++) {
                answer = Math.min(answer, key.get(i));
            }
        }
        
        return answer;
    }
}
profile
ha lee :)

0개의 댓글