문제 설명
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 |