2480 주사위 세개

Updated:

2480 주사위 세개

[Baekjoon] 2480 주사위 세개, 문제 풀이.
프로그래밍 언어: C

문제

2480 주사위 세개

접근

경우의 수를 나누어 코드를 작성하고자 했다. 주사위를 각각 num01, num02, num03으로 할당한다면,

  1. num01 == num02 이면서 num02 == num03인 경우, 문제의 1번의 경우
  2. num01 == num02 이면서 num02 != num03인 경우, 문제의 2번의 경우
  3. num01 != num02 이면서 num02 == num03인 경우, 문제의 2번의 경우
  4. num01 != num02 이면서 num02 != num03이고 num01 == num03인 경우, 문제의 2번의 경우
  5. num01 != num02 이면서 num02 != num03이고 num01 != num03인 경우, 문제의 3번의 경우

로 나눌 수 있다. 이 경우의 수를 조건문을 이용하여 코드를 작성하였다.

문제의 3번의 경우 세 개의 주사위 중 가장 높은 주사위의 눈을 계산식에 사용한다. 이때 가장 높은 숫자를 할당해야 한다.
삼항 연산자의 특징을 이용하여 최댓값을 설정하고자 했다. 최댓값을 max로 할당하고, 위에서 5번, 즉 문제의 3번의 경우에만 max값을 계산해주도록 했다.
삼항 연산자는 다음과 같은 방식으로 사용된다.

num03 = (조건문) ? num01 : num02 // 조건문이 참이면 num01, 거짓이면 num02을 num03에 할당한다. 

이 방법을 이용하여 다음과 같은 코드를 작성했다.

max = (num01 > num02) ? num01 : num02; // 삼항연산자로 max 설정
max = (max > num03) ? max : num03;     // max와 num03 비교하여 새로운 max 할당

num01과 num02를 비교하여 더 큰 값을 max에 할당한 뒤, max와 num03를 비교하여 새로운 max를 할당시키는 방식이다.
마지막으로 각 조건마다 해당하는 경우의 계산식을 사용하여 결과값을 할당하고, printf() 함수를 이용하여 결과값을 출력해준다.

전체 코드

#include <stdio.h>

int main(void)
{
	int num01, num02, num03; // 메모리 확보
	int max;                 // 3번의 경우, 사용할 최댓값 
	int result = 0;          // 결과값 및 초기화

	scanf("%d %d %d", &num01, &num02, &num03);    // 변수 할당 (공백을 기준으로)

	if (num01 == num02) {                               // num01 == num02: 1번 or 2번
		if (num02 == num03) {                           // num02 == num03: 1번
			result = 10000 + num01 * 1000;              // 1번 경우의 계산식 (num01으로 계산)
			printf("%d", result);                       // 출력
		}
		else if (num02 != num03) {                      // num02 != num03: 2번
			result = 1000 + num01 * 100;                // 2번 경우의 계산식 (num01으로 계산)
			printf("%d", result);                       // 출력
		}
	}
	else if (num01 != num02) {                          // num01 != num02: 2번 or 3번
		if (num02 == num03) {                           // num02 == num03: 2번
			result = 1000 + num02 * 100;                // 2번 경우의 계산식 (num02으로 계산)
			printf("%d", result);                       // 출력
		}
		else if (num02 != num03) {                      // num02 != num03: 2번 or 3번
			if (num01 == num03) {                       // num01 == num03: 2번 (num02가 다른경우)
				result = 1000 + num01 * 100;            // 2번 경우의 계산식 (num01으로 계산)
				printf("%d", result);                   // 출력	
			
			else if (num01 != num03)                    // num02 != num03: 3번
				max = (num01 > num02) ? num01 : num02;  // 삼항연산자로 max 설정
				max = (max > num03) ? max : num03;      // max와 num03 비교하여 새로운 max 할당
				result = 100 * max;                     // 3번 경우의 계산식 (max로 계산)
				printf("%d", result);                   // 출력
			}
		}
	}
	return 0;
}

개선 및 부족한 사항

  • 코드에 연산자를 추가하면 더 줄일 수 있을 것 같다.
  • 삼항 연산자를 이용한 최댓값 설정에 미숙하다.

Leave a comment