문제

코드
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;
}
}