2480 주사위 세개
Updated:
2480 주사위 세개
[Baekjoon] 2480 주사위 세개, 문제 풀이.
프로그래밍 언어: C
문제
접근
경우의 수를 나누어 코드를 작성하고자 했다. 주사위를 각각 num01, num02, num03으로 할당한다면,
- num01 == num02 이면서 num02 == num03인 경우, 문제의 1번의 경우
- num01 == num02 이면서 num02 != num03인 경우, 문제의 2번의 경우
- num01 != num02 이면서 num02 == num03인 경우, 문제의 2번의 경우
- num01 != num02 이면서 num02 != num03이고 num01 == num03인 경우, 문제의 2번의 경우
- 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