작성일 :

문제 링크

19786번 - Ставка

설명

우주 포커에서 어떤 색상 칩을 추가 베팅해야 최대 이익을 얻을 수 있는지 결정하는 문제입니다.

색상 칩의 추가 베팅과 관련하여 문제에서 주어지는 수익 계산 공식은 다음과 같습니다.

  • AC 를 베팅 계수라고 하였을 때, 기대 수익은 A * (r2 + g2 + b2) + 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;
}