(백준)2480번 주사위 세개 문제 해결!

DevSeoRex·2022년 6월 2일
0

백준

목록 보기
1/12

아직 제대로 알고리즘을 배우지는 못했지만 풀 수 있는 한도내에서 백준 문제를 풀고 있는 중이다. 단계별로 풀어보는 중인데 오늘은 조건문 파트가 끝나서 정리도 할겸 마지막에 나오는 문제를 포스팅 해본다.

아래는 작성한 코드이다.

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//세 주사위의 값을 입력 받는다.
		int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt();
		// 눈이 모두 다를경우 가장 큰 눈으로 상금을 계산하므로, 대소비교를 위해 미리 a의 값을 max에 넣어 놓는다.
		int max = a;
		//1번 조건 -> a,b,c가 전부 값이 같을 경우
		if(a==b && b==c) {
			System.out.println(10000+(a*1000));
		//2번 조건 -> a와 b가 같고, a와 c의 값이 다르거나 a와 c가 같고, a와 b의 값이 다른경우
		//			a를 기준으로 잡아서 비교하였기 때문에 항상 a의 값은 b나 c와 같은 조건이므로 a*100으로 계산을 했다.
		}else if((a==b && a!=c) || (a==c && a!=b)) {
			System.out.println(1000+(a*100));
		//2번 조건(b를 기준으로 분할) -> 위에서 이 조건 까지 같이 비교하면 변수가 생길 수 있으므로 b를 기준으로
		// 						   b와 c가 같고 a와 b가 다를 경우로 한번 더 분리해주었다.
		}else if(b==c && a!=b) {
			System.out.println(1000+(b*100));
		//3번 조건(모두 다를때) -> 모두 다를때 가장 큰 눈을 기준으로 계산하므로, a의 값을 max에 이미 넣어둔 상태기때문에
		//					  max를 b와 c와 비교하여 max의 값을 가장 크게 설정해준다. 그리고 출력해준다.
		}else {
			if(max < b) {
				max = b;
			}if(max < c) {
				max = c;							
			}
			System.out.println(max * 100);
		}
	}
}

1. 가장 먼저 조건을 분리했다.

> 1-1. 모두 같은 수가 나올 경우의 수

3개의 1~6 까지의 숫자를 입력 받았을때, 모두 같은 수가 나올 경우의 수는 a=b=c 1가지 밖에 없다.

> 1-2. 같은 눈이 두개 나올 경우의 수

a,b,c 세 개의 숫자를 입력 받았을때 같은 수가 2개 나올 경우의 수는 3가지가 있다.

1번 조건 a==b && a!=c
2번 조건 a==c && a!=b
3번 조건 b==c && a!=b

코드를 작성할때 3번 조건까지 다 결합하게 되면,
결과를 출력할때
1번 조건은 a와 b가 같고 a는 c와 다르다.
2번 조건은 a와 c가 같고 a는 b와 다르다.
3번 조건이 b와 c가 같고 a는 b와 다르다.

이렇게 되면 1,2번 조건은 1000+(a 100)을 해도 결과가 제대로 나온다.
하지만 3번 조건에 해당 될 경우 a는 b와 c와는 다른 값을 가지게 되므로 1000+(a
100)을 해서는 안된다.

따라서 else if문을 하나 더 추가해서 3번 조건은 분리해 주었다.

> 1-3. 모두 다른 수가 나올 경우의 수

모두 같은 수가 나올 경우의 수 보다는 조금 복잡했다.
a의 값을 max라는 변수에 저장해준다.
그 다음 a는 b보다 큰지 c보다 큰지 비교를 해준다.
a의 값이 가장 크다면 a의 값이 max에 저장되어 출력되고
a의 값이 두번째로 크다면 b와의 비교에서 조건이 성립하지 않아,
c의 값이 max의 값이 될 것 이다.
a의 값을 기준으로 b와 c의 값과의 대소비교를 진행 하여 최대값을 얻어낼 수 있도록 작성하였다.

0개의 댓글