본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 2480번 : 주사위 세개

by hyunipad 2023. 4. 20.
반응형

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

 

2480번: 주사위 세개

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

www.acmicpc.net

백준 알고리즘 구현 파트를 브론즈 4 정도부터 풀고 있는데, 부족함을 많이 느끼네요.

코드를 구현할 때 for문에 너무 집착하는 경향이 있는 것 같습니다...

 

이 문제의 포인트는 같은 눈이 몇 개인지를 구해야 하는 것입니다.

아래는 제가짠 코드

for문을 통해 같은 수가 존재 하는지 flag를 통해 저장하고

다시 전체 for문을 통해 같은 눈이 몇개인지와 max값을 구했습니다.

 

그리고 그 아래는 참조한 코드

그냥 if문으로 분기를 하여 상금을 구하고 max 값은 Math.max()를 중첩시켜 구했네요.

메모리나 시간은 제가 짠 코드가 더 잘나오긴 했는데, 직관적인 건 참조한 코드가 더 좋은 거 같습니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Number_2480 {

	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
//		1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 
//		2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다. 
//		3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.  
		
		String[] numArray = br.readLine().split(" ");
		Boolean flag = false;
		int same = 0;
		int count = 0;
		int max = 0;
		
		for(int i = 0 ; i < 2 ; i++) {
			for(int i2 = i + 1 ; i2 < 3 ; i2++) {
				int num_1 = Integer.parseInt(numArray[i]);
				int num_2 = Integer.parseInt(numArray[i2]);
				if(num_1 == num_2) {
					same = num_1;
					flag = true;
				}	
				if(flag) {
					break;
				}
			}
			
			if(flag) {
				break;
			}
		}
		
		for(int i = 0 ; i < numArray.length ; i++) {
			int N = Integer.parseInt(numArray[i]);
			if(same == N) {
				count++;
			}
			
			if(N > max) {
				max = N;
			}
		}
		
		if(count == 3) {
			bw.write(String.valueOf(10000 + same * 1000));
		}else if(count == 2) {
			bw.write(String.valueOf(1000 + same * 100));
		}else {
			bw.write(String.valueOf(max * 100));
		}
		
		br.close();
		bw.flush();
		bw.close();
	}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Number_2480 {
	
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String[] numArray = br.readLine().split(" ");
		int num_1 = Integer.parseInt(numArray[0]);
		int num_2 = Integer.parseInt(numArray[1]);
		int num_3 = Integer.parseInt(numArray[2]);
		
		if (num_1 == num_2 && num_1 == num_3 && num_2 == num_3) {
			bw.write(String.valueOf((10000 + (num_1 * 1000))));
		} else if (num_1 == num_2 || num_1 == num_3) {
			bw.write(String.valueOf(1000 + (num_1 * 100)));
		} else if (num_2 == num_3) {
			bw.write(String.valueOf(1000 + (num_2 * 100)));
		} else {
			bw.write(String.valueOf((Math.max(num_1, Math.max(num_2, num_3)) * 100)));
		}
		
		br.close();
		bw.flush();
		bw.close();
	}
 }
반응형

댓글