작성일 :

문제 링크

15179번 - Golf Croquet

설명

샷 결과가 S/H/D/O로 주어질 때, 두 팀의 득점을 계산해 현재 스코어와 승패 상황을 출력하는 문제입니다.


접근법

샷 순서는 파랑, 빨강, 검정, 노랑 순으로 반복되며, 파랑과 검정은 팀1, 빨강과 노랑은 팀2입니다.

H는 자기 팀 1점, D는 자기 팀 최대 2점, O는 상대 팀 1점입니다. 단, 7점을 초과할 수 없으므로 6점일 때 D를 쳐도 1점만 추가됩니다.

어느 팀이든 7점에 도달하면 경기가 끝나고, 최종 점수를 비교해 승패 상황을 출력합니다.


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
30
31
32
33
34
35
using System;

class Program {
  static void AddScore(int[] sc, int t, int delta) {
    if (sc[t] >= 7) return;
    var add = Math.Min(delta, 7 - sc[t]);
    sc[t] += add;
  }

  static void Main() {
    var team1 = Console.ReadLine()!;
    var team2 = Console.ReadLine()!;
    var s = int.Parse(Console.ReadLine()!);
    var shots = Console.ReadLine()!;

    var sc = new int[2];
    for (int i = 0; i < s; i++) {
      if (sc[0] == 7 || sc[1] == 7) break;
      int t = (i % 4 == 0 || i % 4 == 2) ? 0 : 1;
      switch (shots[i]) {
        case 'H': AddScore(sc, t, 1); break;
        case 'D': AddScore(sc, t, 2); break;
        case 'O': AddScore(sc, 1 - t, 1); break;
        default: break;
      }
    }

    Console.Write($"{team1} {sc[0]} {team2} {sc[1]}. ");
    if (sc[0] == 7) Console.WriteLine($"{team1} has won.");
    else if (sc[1] == 7) Console.WriteLine($"{team2} has won.");
    else if (sc[0] > sc[1]) Console.WriteLine($"{team1} is winning.");
    else if (sc[0] < sc[1]) Console.WriteLine($"{team2} is winning.");
    else Console.WriteLine("All square.");
  }
}

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <bits/stdc++.h>
using namespace std;

void addScore(int& cur, int delta) {
  if (cur >= 7) return;
  cur += min(delta, 7 - cur);
}

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

  string team1, team2;
  getline(cin, team1);
  getline(cin, team2);

  int s; cin >> s;
  string shots; cin >> shots;

  int sc1 = 0, sc2 = 0;
  for (int i = 0; i < s; i++) {
    if (sc1 == 7 || sc2 == 7) break;
    int t = (i % 4 == 0 || i % 4 == 2) ? 0 : 1;
    char c = shots[i];
    if (c == 'H') {
      if (t == 0) addScore(sc1, 1);
      else addScore(sc2, 1);
    } else if (c == 'D') {
      if (t == 0) addScore(sc1, 2);
      else addScore(sc2, 2);
    } else if (c == 'O') {
      if (t == 0) addScore(sc2, 1);
      else addScore(sc1, 1);
    }
  }

  cout << team1 << " " << sc1 << " " << team2 << " " << sc2 << ". ";
  if (sc1 == 7) cout << team1 << " has won.\n";
  else if (sc2 == 7) cout << team2 << " has won.\n";
  else if (sc1 > sc2) cout << team1 << " is winning.\n";
  else if (sc1 < sc2) cout << team2 << " is winning.\n";
  else cout << "All square.\n";

  return 0;
}