작성일 :

문제 링크

2476번 - 주사위 게임

설명

주사위 게임에 참가한 사람들의 결과가 주어지는 상황에서, N (2 ≤ N ≤ 1,000)명의 참가자와 각 참가자가 던진 세 개의 주사위 눈이 주어질 때, 상금 규칙에 따라 가장 많은 상금을 받는 사람의 상금을 구하는 문제입니다.

상금 규칙은 다음과 같습니다:

  • 세 주사위 눈이 모두 같은 경우: 10,000 + (같은 눈) × 1,000원
  • 두 주사위 눈만 같은 경우: 1,000 + (같은 눈) × 100원
  • 세 주사위 눈이 모두 다른 경우: (가장 큰 눈) × 100원


접근법

각 참가자에 대해 세 주사위 눈의 조합을 확인하여 어떤 규칙에 해당하는지 판별합니다.

세 개가 모두 같은지, 두 개가 같은지, 모두 다른지를 순서대로 확인한 후 해당하는 상금 공식을 적용합니다.

모든 참가자의 상금을 계산하면서 최댓값을 추적하여 최종적으로 가장 큰 상금을 출력합니다.



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
using System;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      var n = int.Parse(Console.ReadLine()!);
      var maxPrize = 0;

      for (var i = 0; i < n; i++) {
        var dice = Array.ConvertAll(Console.ReadLine()!.Split(), int.Parse);
        var a = dice[0];
        var b = dice[1];
        var c = dice[2];

        int prize;
        if (a == b && b == c) prize = 10000 + a * 1000;
        else if (a == b || a == c) prize = 1000 + a * 100;
        else if (b == c) prize = 1000 + b * 100;
        else prize = Math.Max(a, Math.Max(b, c)) * 100;

        maxPrize = Math.Max(maxPrize, prize);
      }

      Console.WriteLine(maxPrize);
    }
  }
}

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
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int n; cin >> n;
  int maxPrize = 0;

  for (int i = 0; i < n; i++) {
    int a, b, c; cin >> a >> b >> c;

    int prize;
    if (a == b && b == c) prize = 10000 + a * 1000;
    else if (a == b || a == c) prize = 1000 + a * 100;
    else if (b == c) prize = 1000 + b * 100;
    else prize = max({a, b, c}) * 100;

    maxPrize = max(maxPrize, prize);
  }

  cout << maxPrize << "\n";
  
  return 0;
}