https://www.acmicpc.net/problem/2484
2484번: 주사위 네개
첫째 줄에는 참여하는 사람 수 N이 주어지고 그 다음 줄부터 N개의 줄에 사람들이 주사위를 던진 4개의 눈이 빈칸을 사이에 두고 각각 주어진다.
www.acmicpc.net


[전체 코드]
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); //테스트케이스를 받을 변수 N
int[] num = new int[4]; //주사위 눈을 담을 int형 배열 num
int[] prize = new int[N]; //상금을 담을 int형 배열 prize
int index = 0; //반복문 인덱스
while(index < N) { //테스트케이스만큼 반복
for(int i=0;i<4;i++) { //주사위눈은 3개씩 입력되기 때문에 반복하며 입력
num[i] = sc.nextInt();
}
Arrays.sort(num); //입력받은 3개의 눈 오름차순 정렬
prize[index] = choosePrize(num[0],num[1],num[2],num[3]); //함수 호출(주사위 눈 3개 인수로 대입)
//리턴된 상금값 prize 변수에 저장
index++; //인덱스 1 추가
}
Arrays.sort(prize); //prize값 배열에 모두 저장되었다면 오름차순 정렬
System.out.println(prize[N-1]); //오름차순이기 때문에 젤 마지막에 있는 값이 가장 큰 값이다.
// 따라서 가장 큰 상금값이 출력된다.
}
public static int choosePrize(int X, int Y, int Z , int A) { //3개의 주사위눈 인자로 대입
int prize = 0;
if(Y == Z) { //일단 ?oo? 인경우
if(X == Y) { // ooo? 인경우
if(Z == A) {
prize = 50000 + (X*5000); //oooo 인경우
}
else if(Z!=A){
prize = 10000 + (Y*1000); //ooox 인경우
}
}
else if(Z == A) { //xooo 인경우
prize = 10000 + (A*1000);
}
else {
prize = 1000 + (100*Y); //xoox 인경우
}
} else { //?ox?인경우
if(X == Y && Z == A) { // ooxx인경우
prize = 2000 + (500*Y) + (500*A);
}
else if(X==Y && Z!=A) { //ooxy 인경우
prize = 1000 + (100*Y);
}
else if(X!=Y && Z==A) { // yoxx 인경우
prize = 1000 + (100*A);
}
else { //yoxw 인경우
prize = 100*A;
}
}
return prize;
}
}
[제출 결과]

주사위 네개 문제는 주사위게임과 아주 비슷한 문제인데 주사위 케이스가 하나 추가됨으로써 고려해야될 경우의 수가 대폭 많아 지게 된다. 차근 차근 주사위 눈 4개로 나올 수 있는 경우의 수를 잘 생각해보면 된다.
경우의 수를 하나 생각못해서 틀렸당ㅎㅎ
'Programming > Algorithm(ACM Problems)' 카테고리의 다른 글
| [백준] 2576번 : 홀수 / [자바] JAVA / 학습기록 (0) | 2022.01.20 |
|---|---|
| [백준] 2490번 : 윷놀이 / [자바] JAVA / 학습기록 (0) | 2022.01.20 |
| [백준] 2476번 : 주사위 게임 / [자바] JAVA / 학습기록 (0) | 2022.01.20 |
| [백준] 2475번 : 검증수 / [자바] JAVA / 학습기록 (0) | 2022.01.20 |
| [백준] 2438번 : 별찍기 - 1 / [자바] JAVA (0) | 2022.01.20 |