문제 설명
1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.
- 네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
- 세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q) 점을 얻습니다.
- 2
- 주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.
- 어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.
- 네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.
네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
제한사항
- a, b, c, d는 1 이상 6 이하의 정수입니다.
입출력 예
a | b | c | d | result |
2 | 2 | 2 | 2 | 2222 |
4 | 1 | 4 | 4 | 1681 |
6 | 3 | 3 | 6 | 27 |
2 | 5 | 2 | 6 | 30 |
6 | 4 | 2 | 5 | 2 |
풀이
import java.util.*;
import java.math.*;
class Solution {
public int solution(int a, int b, int c, int d) {
int answer = 0;
Map<Integer, Integer> map = new HashMap<>();
map.put(a, map.getOrDefault(a, 0) + 1);
map.put(b, map.getOrDefault(b, 0) + 1);
map.put(c, map.getOrDefault(c, 0) + 1);
map.put(d, map.getOrDefault(d, 0) + 1);
List<Integer> keys = new ArrayList<Integer>(map.keySet());
switch(map.size()) {
case 1: answer = 1111 * a; break;
case 2:
if(map.get(keys.get(0)) == 1 || map.get(keys.get(1)) == 1) { // 3:1
int p = map.get(keys.get(0)) == 3 ? keys.get(0) : keys.get(1);
int q = map.get(keys.get(0)) == 1 ? keys.get(0) : keys.get(1);
answer = (int)Math.pow((10 * p) + q, 2);
} else { // 2:2
int p = keys.get(0);
int q = keys.get(1);
answer = (p + q) * Math.abs(p - q);
}
break;
case 3: // 2:1:1
for(Integer i : map.keySet()) {
if(map.get(i) != 2) answer = answer == 0 ? answer + i : answer * i;
}
break;
case 4: // 1:1:1:1
int min = 7;
for(Integer i : map.keySet()) {
min = Math.min(min, i);
}
answer = min;
break;
}
return answer;
}
}
참고
'Coding Test > 프로그래머스[JAVA]' 카테고리의 다른 글
[프로그래머스 Lv0.] 181832번 정수를 나선형으로 배치하기 (JAVA) (0) | 2024.11.05 |
---|---|
[프로그래머스 Lv0.] 181921번 배열 만들기 2 (JAVA) (0) | 2024.11.05 |
[프로그래머스 Lv0.] 181893번 배열 조각하기 (JAVA) (0) | 2024.11.04 |
[프로그래머스 Lv0.] 181932번 코드 처리하기 (JAVA) (0) | 2024.11.04 |
[프로그래머스 Lv0.] 181851번 전국 대회 선발 고사 (JAVA) (0) | 2024.11.01 |