주사위 게임 3
문제
1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.
•
네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
•
세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q) 점을 얻습니다.
•
주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.
•
어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r이라면 q × r점을 얻습니다.
•
네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.
네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
풀이
package programmers.codingBasicTraining;
import java.util.*;
public class PROB29 {
public static void main(String[] args) {
System.out.println(solution(2, 2, 2, 2));
System.out.println(solution(4, 1, 4, 4));
System.out.println(solution(6, 3, 3, 6));
System.out.println(solution(2, 5, 2, 6));
System.out.println(solution(6, 4, 2, 5));
}
public static int solution (int a, int b, int c, int d) {
/*
* 1. 4개 모두 같은 숫자
* 2. 3개 같은숫자, 1개 다른숫자
* 3. 두개 같은 숫자
* 4. 두개 같은숫자, 각각 다른숫지
* 5. 모드 다른 숫자
* */
int ret = 0; // 점수
Set<Integer> set = new HashSet<>(); // 중복 체크 하는 단위
int[] board = new int[7]; // 4개의 주사위 숫자 acc
set.add(a);
set.add(b);
set.add(c);
set.add(d);
board[a]++;
board[b]++;
board[c]++;
board[d]++;
if (set.size() == 1) {
// 모두 같은 숫자
ret = set.stream().findFirst().get() * 1111;
} else if (set.size() == 2) {
/* 같은게 두개가 있다
* case 1. 2 : 2
* case 2. 1 : 3
* case 3. 3 : 1
* */
List<Integer> list = new ArrayList<>(set);
int first = list.get(0);
int second = list.get(1);
if (board[first] == 2) {
// case 1.
ret = (first + second) * Math.abs(first - second);
} else if (board[first] == 3) {
// case 3.
ret = (first*10 + second) * (first*10 + second);
} else {
// case 2.
ret = (first + second*10) * (first + second*10);
}
} else if (set.size() == 3) {
// 3개가 겹침
List<Integer> list = new ArrayList<>(set);
int first = list.get(0);
int second = list.get(1);
int third = list.get(2);
if (board[first] == 1 && board[second] == 1) {
ret = first * second;
} else if (board[first] == 1 && board[third] == 1) {
ret = first * third;
} else {
ret = second * third;
}
} else {
ret = Math.min(Math.min(Math.min(a, b), c), d);
}
return ret;
}
}
Java
복사