코딩테스트/Programmers

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

grove1212 2025. 1. 22. 17:27

본인 풀이

class Solution {
    public int solution(int a, int b, int c, int d) {
        int answer = 0;
        int aSame = 0, bSame = 0, cSame = 0, dSame = 0;
        
        //a 기준 a랑 같은 것의 개수
        if(a == b) aSame++;
        if(a == c) aSame++;
        if(a == d) aSame++;
        
        //b 기준 b랑 같은 것의 개수
        if(a == b) bSame++;
        if(c == b) bSame++;
        if(d == b) bSame++;
        
        //c 기준 c랑 같은 것의 개수
        if(c == a) cSame++;
        if(c == b) cSame++;
        if(c == d) cSame++;
        
        //d 기준 d랑 같은 것의 개수
        if(d == a) dSame++;
        if(d == b) dSame++;
        if(d == c) dSame++;
        
        int[] cntArr = new int[4];
        cntArr[aSame]++;
        cntArr[bSame]++;
        cntArr[cSame]++;
        cntArr[dSame]++;
        /*
        * 모두 3가 나오면 : equalFour
		* 2이 세 번, 0이 한 번 나오면: equalThree
		* 1가 4번 나오면 : equalDoualeTwo
		* 1가 2번 나오면 : equalTwo
		* 0이 4번 나오면: diffAll
		*/
        if(cntArr[3] == 4){
            answer = 1111 * a;
        } else if(cntArr[2] == 3 && cntArr[0] == 1){
            if(a != b && b == c){
                answer = (10 * b + a) * (10 * b + a);
            } else if(b != c && c == d){
                answer = (10 * c + b) * (10 * c + b);
            } else if(c != d && d == a){
                answer = (10 * d +c) * (10 * d + c);
            } else{
                answer = (10 * a + d) * (10 * a + d);
            }            
        } else if(cntArr[1] == 4){
            if(a != b){
                answer = (a + b) * Math.abs(a - b);
            } else if(a != c){
                answer = (a + c) * Math.abs(a - c);
            } else if(a != d){
                answer = (a + d) * Math.abs(a - d);
            }
        } else if(cntArr[1] == 2){
            if(a == b) answer = c * d;
            else if(a == c) answer = b * d;
            else if(a == d) answer = b * c;
            else if(b == c) answer = a * d;
            else if(b == d) answer = a * c;
            else if(c == d) answer = a * b;
        } else if(cntArr[0] == 4){
            answer = Math.min(a, Math.min(b,Math.min(c,d)));
        }
        return answer;
    }
    
}

 

다른 분들의 멋진 풀이

Arrays.sort를 이용해 푸셨다.

import java.util.Arrays;

class Solution {
    public int solution(int a, int b, int c, int d) {

        int[] dice = { a, b, c, d };
        Arrays.sort(dice);

        int ans = 0;

        if (dice[0] == dice[3]) {
            ans = 1111 * dice[3];
        } else if (dice[0] == dice[2] || dice[1] == dice[3]) {
            ans = (int) Math.pow(dice[1] * 10 + (dice[0] + dice[3] - dice[1]), 2);
        } else if (dice[0] == dice[1] && dice[2] == dice[3]) {
            ans = (dice[0] + dice[3]) * (dice[3] - dice[0]);
        } else if (dice[0] == dice[1]) {
            ans = dice[2] * dice[3];
        } else if (dice[1] == dice[2]) {
            ans = dice[0] * dice[3];
        } else if (dice[2] == dice[3]) {
            ans = dice[0] * dice[1];
        } else {
            ans = dice[0];
        }

        return ans;
    }
}

 

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