[C]백준 2480번 - 주사위 세개 -
문제
코드
#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);
음... 최댓값이 나오기는 하지만, 나의 실력 부족인지 가독성이 매우 떨어져 보인다. 그래도 경험이 쌓이면 가독성 좋은 코드를 만들 수 있게 되지 않을까
Author And Source
이 문제에 관하여([C]백준 2480번 - 주사위 세개 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@scr08212/C백준-2480번저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)