Study/Algorithm

[BOJ] 백준 2480번: 주사위 세개_자바(JAVA)

delay100 2024. 1. 30. 02:38
728x90
반응형

1. 문제

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

 

2480번: 주사위 세개

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 같은 눈이 2개만

www.acmicpc.net


2. 접근 및 해결

2-1) 접근

문제에는 아래와 같은 조건이 존재합니다.

  1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
  2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
  3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.

처음 봤을 때 IF문을 많이 쓰면 금방 해결이 되겠다고 생각이 들었지만,

문제 해결 시 최소한의 IF문을 사용하고 싶었습니다.

각각 하나하나 IF문을 걸고, 각 상황에 따라서는 조건을 달리하는 방법을 생각해보았습니다.

 

2-2) 해결

 

1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.

이건 IF문으로 A=B=C를 비교하면 됩니다.

 

3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.

A !=B, A!=C, B!=C를 확인하고,

가장 큰 눈을 알아야하니까 오름차순 정렬을 통해 가장 큰 눈이 가장 리스트의 뒤쪽에 존재하도록 했습니다.

 

2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.

이건 1, 3의 조건에서 else를 걸고,

같은 눈이 무엇인지 알아야하니까 오름차순으로 정렬된 리스트에서 중간에 있는 값을 찾으면 됩니다. 주사위 3개를 굴리기 때문에 가능한 방법입니다.

예를들어 3 2 2 를 오름차순 정렬하면 2 2 3이니까 무조건 중간(두번째)에 있는 숫자인 2가 중복되는 숫자이가 됩니다.


3. 코드(JAVA) 

import java.util.*;
import java.io.*;

public class p2480 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		int[] list = new int[3];
	
		for(int i=0; i<3; i++) {
			list[i] = Integer.parseInt(st.nextToken());
		}
		Arrays.sort(list);
		
		if (list[0] == list[1] && list[1] == list[2]) {
			bw.write(Integer.toString(10000+list[0]*1000));
		} else if (list[0] != list[1] && list[0] != list[2] && list[1] != list[2]) {
			bw.write(Integer.toString(list[2]*100));
		} else {
			bw.write(Integer.toString(1000+list[1]*100));
		} 
		
		
		br.close();
		bw.close();
	}
}
728x90
반응형