본문 바로가기

C언어/백준 알고리즘

[백준/C언어] 2480번 주사위 세개

문제

 

코드
#include <stdio.h>	
	
int	main() {

	int a, b, c;
	int prize = 0;
	int max = 0;

	scanf("%d %d %d", &a, &b, &c); {

		if (a == b && b == c) {
			prize = 10000 + a * 1000;
		}

		else if (a == b) {
			prize = 1000 + a * 100;
		}
		
		else if (b == c) {
			prize = 1000 + b * 100;
		}

		else if (a == c) {
			prize = 1000 + c * 100;
		}
		else if (a > b && a > c) {
			prize = a * 100;
		}
		else if (b > a && b > c) {
			prize = b * 100;
		}
		else if (c > b && c > a) {
			prize = c * 100;
		}

		printf("%d", prize);

		return 0;

	}
	
}

 

문제를 보고 복잡하게 생각할 것 없이 일어날 수 있는 경우의 수를 적어본다.

경우의 수

같은 눈이 3개 나오는 경우

333

같은 눈이 2개만 나오는 경우

133,313,331

모두 다른 눈이 나오는 경우

321,312
231,213
123,132

 

해석

이렇게 모두 적어 놓고 보면 생각보다 쉽게 코드를 작성할 수 있다.

같은 눈이 세개가 나오는 경우엔 논리연산자를 이용해서 작성하면 a == b, b == c 는 a == c도 되기 때문에 

a == b && b == c로 작성을 하면 되는데 이제부터 조금 헷갈린다.

같은 눈이 2개만 나온 경우를 한 줄에 조건을 만들어서 if문을 사용하려고 해봤지만 그렇게 복잡하게 할 필요없이 하나하나 일일이 조건을 걸어줘도 되겠다는 생각에 하나하나 노가다로 작성했다..

모두 다른 눈이 나오는 경우는 경우를 보고 조건을 만들었다기 보다 받는 상금에 초점을 뒀다.

모두 다른 눈이 나오는 경우의 상금은 가장 큰 눈에서 100을 곱한 값을 받기 때문에 a가 가장 큰경우, b가 가장 큰 경우, c가 가장 큰 경우를 조건으로 설정해서 코드를 작성해보았다.

어찌저찌 결과값은 나왔고 문제는 풀었지만 가독성이 좋지 않은 것 같다. 

다음에는 가독성이 좋게끔 코드를 작성해봐야겠다.