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];
}
}
}
가독성 좋은 코드를 짜려고 노력했으나, 짜고 보니 문제가 많아 보이는 코드네요.
여기서 주사위 하나가 더 추가된다면 코드를 다시 갈아야 한다는..
눈감고 다른 문제 풀러 갑니다
이런 식으로 풀 수도 있구나~ 보시고 가세요
위와 같은 문제에서 배열 중복 제거를 이용해서 푸는걸 좋아합니다.