본문 바로가기
Programming/Algorithm(ACM Problems)

[백준] 2484번 : 주사위 네개 / [자바] JAVA / 학습기록

by jongmln_ 2022. 1. 20.

https://www.acmicpc.net/problem/2484

 

2484번: 주사위 네개

첫째 줄에는 참여하는 사람 수 N이 주어지고 그 다음 줄부터 N개의 줄에 사람들이 주사위를 던진 4개의 눈이 빈칸을 사이에 두고 각각 주어진다.

www.acmicpc.net


[백준] 2484번 : 주사위 네개
[백준] 2484번 : 주사위 네개 입출력예제


[전체 코드]

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개로 나올 수 있는 경우의 수를 잘 생각해보면 된다.

경우의 수를 하나 생각못해서 틀렸당ㅎㅎ