문제
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원을 상금으로 받게 된다.
N(2 ≤ N ≤ 1,000)명이 주사위 게임에 참여하였을 때, 가장 많은 상금을 받은 사람의 상금을 출력하는 프로그램을 작성하시오. (링크)
풀이
상금을 계산하는 규칙이 복잡하니까 함수로 구현하자
소스코드
#include <iostream>
using namespace std;
int calcPrize(int d1, int d2, int d3);
int main()
{
int N;
cin >> N;
int biggestPrize=0;
int prize=0;
int i=0;
while(i<N)
{
int d1, d2, d3;
cin >> d1 >> d2 >> d3;
prize = calcPrize(d1, d2, d3);
if(prize > biggestPrize) biggestPrize = prize;
i++;
}
cout << biggestPrize << endl;
return 0;
}
int calcPrize(int d1, int d2, int d3)
{
int prize=0;
if(d1 == d2 && d2 == d3)
{
prize = 10000 + d1*1000;
} else if(d1 == d2 || d2 == d3 || d3 == d1) {
if(d1 == d2 || d1 == d3)
prize = 1000 + d1*100;
if(d2 == d3)
prize = 1000 + d2*100;
} else {
int max=d1;
if(d2 > max) max = d2;
if(d3 > max) max = d3;
prize = max*100;
}
return prize;
}
회고
문제 열심히 읽고 시키는 대로 풀었다.
'Problem Solving' 카테고리의 다른 글
[백준/BOJ] 2935. BUKA (C++) (0) | 2024.05.11 |
---|---|
[백준/BOJ] 10214. Baseball (C++) (0) | 2024.05.11 |
[백준/BOJ] 1934. 최소공배수 (C++) (0) | 2024.05.10 |
[백준/BOJ] 2163. 초콜릿 자르기 (C++) (0) | 2024.05.10 |
[백준/BOJ] 2754. 학점 계산 (C++) (0) | 2024.05.08 |