https://www.acmicpc.net/problem/2480
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.
3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.
첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.
첫째 줄에 게임의 상금을 출력 한다.
크게 경우는 3가지가 있다. a,b,c가 모두 같은 경우, a, b, c 중에 두 개만 같은 경우, a, b, c 모두 다른 경우이다. 중첩 if~else 문을 사용하여 상금을 구할 수 있다.
<결과>
;(세미콜론)이 printf 식별자 앞에 없어서 실행이 되지 않았다.
책에선 else 뒤에 세미콜론을 안 붙이던데 왜 붙여야 되는건지 모르겠다.
- else에 조건을 썼기 때문에 세미콜론을 붙이라고 한 것이다.
- c언어에서 =은 대입하라는 의미이고, ==은 같다는 의미다. 따라서 저기에선 ==을 써야 한다.
- 조건문이 틀렸다. a == b == c 와 a < b < c 같은 형식은 C언어에선 지원하지 않는다.
- 추가로 풀 때, a,b,c가 모두 다른 경우를 마지막 else로 처리하면 더 쉬울것이다.
#include <stdio.h>
int main(void)
{
int a, b, c;
scanf_s("%d %d %d", &a, &b, &c);
if (a == b && a == c) // a,b,c가 모두 같은 경우
printf("%d", 10000 + (a * 1000));
else if (a==b || b==c || c==a) { // a,b,c 중 두 개만 같은 경우
if (a == b && b!= c)
printf("%d\n", 1000 + (a * 100));
else if (b == c && b!= a)
printf("%d\n", 1000 + (b * 100));
else
printf("%d\n", 1000 + (c * 100));
}
else { // a,b,c가 모두 다른 경우
if(b<a&&c<a)
printf("%d\n", a * 100);
else if(a<b&&c<b)
printf("%d\n", b * 100);
else
printf("%d\n", c * 100);
}
return 0;
}
- 1~6까지의 숫자 3개를 입력한다.
- 첫번째 if문에서 a, b, c가 모두 같은 경우, 그 조건에 맞는 연산 값을 출력했다.
- 그 다음 else if는 두 개만 같은 경우에서, 중첩 if~else문을 사용하여 a, b만 같은 경우, b, c만 같은 경우, 나머지(a, c만 같은) 경우로 해서 조건에 맞는 연산 값을 출력했다.
- 마지막으로 a, b, c 모두 다른 경우에도 중첩 if~else문을 사용하여 각각 a, b, c가 젤 큰 경우로 연산값을 출력해주었다.
if문이 어렵다고 느꼈었는데, 이 문제를 고민하고 풀어보면서 if문에 어느정도 익숙해진 것 같다. 그리고 =은 대입, ==은 같다는 의미를 알고 있었는데도 어처구니 없는 실수를 했다. 그래도 실수해 보면서 연산자에 대해 더 확실히 알게된 것 같다.