[C]백준_2480 : 주사위 세개

Alal11·2022년 5월 7일
0
post-thumbnail

➡️문제 링크

https://www.acmicpc.net/problem/2480

➡️문제

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

  1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
  2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
  3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.

예를 들어, 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 문을 사용하여 상금을 구할 수 있다.

➡️코드-1(❌)

<결과>

;(세미콜론)이 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_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. 1~6까지의 숫자 3개를 입력한다.
  1. 첫번째 if문에서 a, b, c가 모두 같은 경우, 그 조건에 맞는 연산 값을 출력했다.
  1. 그 다음 else if는 두 개만 같은 경우에서, 중첩 if~else문을 사용하여 a, b만 같은 경우, b, c만 같은 경우, 나머지(a, c만 같은) 경우로 해서 조건에 맞는 연산 값을 출력했다.
  1. 마지막으로 a, b, c 모두 다른 경우에도 중첩 if~else문을 사용하여 각각 a, b, c가 젤 큰 경우로 연산값을 출력해주었다.

➡️end

if문이 어렵다고 느꼈었는데, 이 문제를 고민하고 풀어보면서 if문에 어느정도 익숙해진 것 같다. 그리고 =은 대입, ==은 같다는 의미를 알고 있었는데도 어처구니 없는 실수를 했다. 그래도 실수해 보면서 연산자에 대해 더 확실히 알게된 것 같다.

0개의 댓글