[C]백준 2480번 - 주사위 세개 -

1942 단어 알고리즘C백준C

문제

코드

#include <stdio.h>

int main(void) {
	int dice[3] = { 0 };
	int price = 0, same = 0, count = 0, a = 0, b = 0;
	scanf("%d %d %d", &dice[0], &dice[1], &dice[2]);
	for (int i = 0; i < 3; i++) {
		same = 0;
		if (dice[b] < dice[i])
			b = i;
		for (int j = 0; j < 3; j++) {
			if (dice[i] == dice[j])
				same++;
		}
		if (same > count) {
			count = same;
			a = i;
		}
	}
	if (count == 3)
		price = 10000 + dice[a] * 1000;
	else if (count == 2)
		price = 1000 + dice[a] * 100;
	else
		price = dice[b] * 100;
	printf("%d", price);
}

여담

좀 아쉬운 답이다. if문을 통해 조건 하달을 했다면 어땠을까? 훨씬 짧고 간결한 코드가 됐을텐데.

#include <stdio.h>

int main(void) {
	int d[3] = { 0 }, b = 0;
	scanf("%d %d %d", &d[0], &d[1], &d[2]);
	if (d[0] == d[1] && d[1] == d[2])
		printf("%d", 10000 + d[0] * 1000);
	else if (d[0] == d[1] || d[0] == d[2])
		printf("%d", 1000 + d[0] * 100);
	else if (d[1] == d[2])
		printf("%d", 1000 + d[1] * 100);
	else {
		for (int i = 0; i < 3; i++) {
			if (d[i] > b)
				b = d[i];
		}
		printf("%d",b*100);
	}
}

이런식으로 짜는게 훨씬 간결하고 좋아보인다.
헌데 위의 코드를 짜던 중 의문점이 하나 생겼다.
A,B,C 중 최댓값을 구하는 간단한 식이 없을까?
.
.
.
있었다. 삼항연산자라는게 있더라.

printf("%d", ((d[0] > d[1] ? d[0] : d[1]) > d[2] ? (d[0] > d[1] ? d[0] : d[1]) : d[2])*100);

음... 최댓값이 나오기는 하지만, 나의 실력 부족인지 가독성이 매우 떨어져 보인다. 그래도 경험이 쌓이면 가독성 좋은 코드를 만들 수 있게 되지 않을까

좋은 웹페이지 즐겨찾기