(https://www.acmicpc.net/problem/2480)
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×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 6 1300
2 2 2 12000
6 2 5 600
#include <stdio.h>
int findMax(int n[]);
int main() {
int num[3];
scanf("%d %d %d",&num[0], &num[1], &num[2]);
int max = findMax(num);
if (num[0] == num[1] && num[1] == num[2]) {
printf("%d", 10000 + num[0] * 1000);
}
else if (num[0] == num[1] || num[1] == num[2]) {
printf("%d", 1000 + num[1] * 100);
}
else if (num[0] == num[2]) {
printf("%d", 1000 + num[0] * 100);
}
else {
printf("%d", max * 100);
}
return 0;
}
int findMax(int n[]) {
int m = n[0];
for (int i = 0; i < 3; i++) {
if (n[i] > m) {
m = n[i];
}
}
return m;
}
경우는 세 가지이다. 입력받은 수가 모두 같은 경우, 하나만 다른 경우, 모두 다른 경우. 처음엔 변수 a, b, c를 만들어 입력받은 후에 그 값을 비교하려 했다. 하지만 그렇게 할 경우 for문을 이용한 최댓값을 찾는 알고리즘을 이용할 수 없으므로 배열의 형태로 값을 받는다.
첫 번째 if문의 조건은 입력받은 수가 모두 같을 때이다.
두 번째 else if의 조건은 하나만 다른 경우이다. else if를 사용했기 때문에 앞의 if문의 조건 즉, 모든 수가 같을 경우는 배제한다. 그리고 두 번째 else if문의 조건을
num[0] == num[1] || num[1] == num[2] || num[0] == num[2]
으로 설정하지 않은 것은 같은 눈의 값을 수식에 이용해야 하기 때문이다. 두 번째 else if문의 조건은 num[1]이 공통적으로 같은 눈에 해당되기 때문에 따로 분리했다.
마지막으로 모두 같지도 않고 하나만 다른 경우도 아닌 것은 세 눈이 모두 다를 때이므로 else문을 이용한다.
최댓값을 구하는 알고리즘은 일시적으로 최댓값을 임의의 값으로 할당하고 반복문을 통해 임의로 지정된 최댓값보다 다른 수가 클 경우 그 수를 다시 최댓값에 할당하는 것이다.