[백준 19786] Ставка (C#, C++) - soo:bak
작성일 :
문제 링크
설명
우주 포커에서 어떤 색상 칩을 추가 베팅해야 최대 이익을 얻을 수 있는지 결정하는 문제입니다.
색상 칩의 추가 베팅과 관련하여 문제에서 주어지는 수익 계산 공식은 다음과 같습니다.
A
와C
를 베팅 계수라고 하였을 때, 기대 수익은A
* (r
2 +g
2 +b
2) +C
+min{r, g, b}
으로 계산된다.
따라서, 각 테스트 케이스들에 대해 칩의 갯수 및 각 색상 칩에 대한 정보를 입력받은 후, 각 색상 칩에 대하여 해당 색상 칩을 하나 추가하였을 때 얻을 수 있는 이익을 계산합니다.
이후, 계산된 이익 중에서 가장 큰 이익을 탐색한 후, 그에 해당하는 칩의 색상을 출력합니다.
세 가지 색상의 칩에 대한 추가 베팅 이익이 모두 같을 시에는, 아무 색상이나 출력해도 된다는 점에 유의합니다.
Code
[ C# ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
namespace Solution {
class Program {
static void Main(string[] args) {
var cntCase = int.Parse(Console.ReadLine()!);
for (int t = 0; t < cntCase; t++) {
var input = Console.ReadLine()!.Split(' ');
var a = int.Parse(input[0]);
var c = int.Parse(input[1]);
input = Console.ReadLine()!.Split(' ');
var r = int.Parse(input[0]);
var g = int.Parse(input[1]);
var b = int.Parse(input[2]);
var red = a * (Math.Pow(r + 1, 2) + Math.Pow(g, 2) + Math.Pow(b, 2)) + c * Math.Min(Math.Min(r + 1, g), b);
var green = a * (Math.Pow(r, 2) + Math.Pow(g + 1, 2) + Math.Pow(b, 2)) + c * Math.Min(Math.Min(r, g + 1), b);
var blue = a * (Math.Pow(r, 2) + Math.Pow(g, 2) + Math.Pow(b + 1, 2)) + c * Math.Min(Math.Min(r, g), b + 1);
if (red >= green && red >= blue)
Console.WriteLine("RED");
else if (green >= red && green >= blue)
Console.WriteLine("GREEN");
else Console.WriteLine("BLUE");
}
}
}
}
[ C++ ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int cntCase; cin >> cntCase;
for (int t = 0; t < cntCase; t++) {
int a ,c, r, g, b;
cin >> a >> c >> r >> g >> b;
int red = a * (pow(r + 1, 2) + pow(g, 2) + pow(b, 2)) + c * min({r + 1, g, b});
int green = a * (pow(r, 2) + pow(g + 1, 2) + pow(b, 2)) + c * min({r, g + 1, b});
int blue = a * (pow(r, 2) + pow(g, 2) + pow(b + 1, 2)) + c * min({r, g, b + 1});
if (red >= green && red >= blue) cout << "RED\n";
else if (green >= red && green >= blue) cout << "GREEN\n";
else cout << "BLUE\n";
}
return 0;
}