본문 바로가기

코딩테스트/프로그래머스

프로그래머스 코딩 기초 트레이닝 주사위게임3 JAVA

import java.util.*;

class Solution {
    public int solution(int a, int b, int c, int d) {
    	// 주사위 배열 생성, 정렬
        Integer[] dice = {a, b, c, d};
        Arrays.sort(dice);

        // 중복 제거
        Set<Integer> set = new HashSet<>(Arrays.asList(dice));
        Integer[] diceList = set.toArray(new Integer[0]);

        // 네 주사위의 숫자가 같다면 (p, p, p, p)
        if(diceList.length == 1) {
            return 1111 * diceList[0];

        }else if(diceList.length == 2) {
            int p = diceList[0];
            int q = diceList[1];
			
            // 세 주사위의 숫자가 같다면 (p, p, p, q)
            if(dice[1] == dice[2]) {
                if(dice[0] != dice[1]) {
                    int tmp = p;
                    p = q;
                    q = tmp;
                }
                return (int) Math.pow(10 * p + q, 2);
			
            // 두 주사위씩 숫자가 같다면 (p, p, q, q)
            }else {
                return (p + q) * Math.abs(p - q);
            }

        // 두 주사위의 숫자가 같고, 나머지 주사위의 숫자가 다르다면 (p, p, q, r)
        }else if(diceList.length == 3) {
            int q = dice[0];
            int r = dice[1];

            if(dice[0] == dice[1]) {
                q = dice[2];
                r = dice[3];
            }else if(dice[1] == dice[2]) {
                q = dice[0];
                r = dice[3];
            }
            return q * r;

        // 네 주사위의 숫자가 다르다면 (p, q, r, s)
        }else {
            return diceList[0];
        }
    }
}

가독성 좋은 코드를 짜려고 노력했으나, 짜고 보니 문제가 많아 보이는 코드네요.

여기서 주사위 하나가 더 추가된다면 코드를 다시 갈아야 한다는..

눈감고 다른 문제 풀러 갑니다

 

이런 식으로 풀 수도 있구나~ 보시고 가세요

위와 같은 문제에서 배열 중복 제거를 이용해서 푸는걸 좋아합니다.