2022년 5월 8일에 작성됨
https://www.acmicpc.net/problem/2480
2480번: 주사위 세개
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 같은 눈이 2개
www.acmicpc.net
문제 분석
크게 경우는 3가지가 있다. a,b,c가 모두 같은 경우, a, b, c 중에 두 개만 같은 경우, a, b, c 모두 다른 경우이다. 중첩 if~else 문을 사용하여 상금을 구할 수 있다.
소스 코드-1 (❌)
#include <stdio.h>
int main(void)
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if (a = b = c) { // a,b,c가 모두 같은 경우
printf("%d", 10000 + (a * 1000));
}
else if (a != b != c) { // a,b,c가 모두 다른 경우
if (a < b < c || b < a < c)
printf("%d\n", c * 100);
else if (c < b < a || b < a < c)
printf("%d\n", a * 100);
else(a < c < b || c < a < b)
printf("%d\n", b * 100);
}
else { // a,b,c 중 두 개만 같은 경우
if (a = b != c)
printf("%d\n", 1000 + (a * 100));
else if (a = c != b)
printf("%d\n", 1000 + (b * 100));
else(c = b != a)
printf("%d\n", 1000 + (c * 100));
}
return 0;
}
<결과>
;(세미콜론)이 printf 식별자 앞에 없어서 실행이 되지 않았다.
책에선 else 뒤에 세미콜론을 안 붙이던데 왜 붙여야 되는건지 모르겠다.
✍️피드백
- else에 조건을 썼기 때문에 세미콜론을 붙이라고 한 것이다.
- c언어에서 =은 대입하라는 의미이고, ==은 같다는 의미다. 따라서 저기에선 ==을 써야 한다.
- 조건문이 틀렸다. a == b == c 와 a < b < c 같은 형식은 C언어에선 지원하지 않는다.
- 추가로 풀 때, a, b, c가 모두 다른 경우를 마지막 else로 처리하면 더 쉬울것이다.
소스 코드-2 (⭕)
#include <stdio.h>
int main(void)
{
int a, b, c;
scanf("%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. 1~6까지의 숫자 3개를 입력한다.
2. 첫번째 if문에서 a, b, c가 모두 같은 경우, 그 조건에 맞는 연산 값을 출력했다.
3. 그 다음 else if는 두 개만 같은 경우에서, 중첩 if~else문을 사용하여 a, b만 같은 경우, b, c만 같은 경우, 나머지(a, c만 같은) 경우로 해서 조건에 맞는 연산 값을 출력했다.
4. 마지막으로 a, b, c 모두 다른 경우에도 중첩 if~else문을 사용하여 각각 a, b, c가 젤 큰 경우로 연산값을 출력해주었다.
end
if문이 어렵다고 느꼈었는데, 이 문제를 고민하고 풀어보면서 if문에 어느정도 익숙해진 것 같다. 그리고 =은 대입, ==은 같다는 의미를 알고 있었는데도 어처구니 없는 실수를 했다. 그래도 실수해 보면서 연산자에 대해 더 확실히 알게된 것 같다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[C]백준_2884 : 알람 시계 (0) | 2023.04.14 |
---|---|
[C]백준_2753 : 윤년 (0) | 2023.04.11 |
[C]백준_7287 : 등록 (0) | 2023.04.05 |
[C]백준_5554 : 심부름 가는 길 (0) | 2023.04.04 |
[C]백준_3046 : R2 (0) | 2023.04.03 |