작성일 :

문제 링크

7597번 - Tennis

설명

포인트 승자가 A 또는 B로 주어진 문자열을 따라가며 테니스 게임 스코어를 계산하는 문제입니다. 게임 승리 조건은 포인트 4 이상이면서 상대보다 2점 이상 앞설 때입니다.


접근법

먼저 각 플레이어의 현재 포인트와 게임 수를 0으로 초기화합니다.

다음으로 문자열을 순회하며 해당 플레이어의 포인트를 1 증가시킵니다. 업데이트 후 한 플레이어가 4점 이상이면서 상대보다 2점 이상 앞서면 게임 승리로 처리하고 포인트를 리셋합니다.

이후 한 줄 처리가 끝나면 각 플레이어의 게임 수를 출력합니다.



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;

class Program {
  static void Main() {
    string? line;
    while ((line = Console.ReadLine()) != null) {
      if (line == "#")
        break;

      int pa = 0, pb = 0, ga = 0, gb = 0;
      foreach (var c in line) {
        if (c == 'A') pa++;
        else if (c == 'B') pb++;

        if (pa >= 4 && pa - pb >= 2) {
          ga++;
          pa = pb = 0;
        }
        else if (pb >= 4 && pb - pa >= 2) {
          gb++;
          pa = pb = 0;
        }
      }
      Console.WriteLine($"A {ga} B {gb}");
    }
  }
}

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

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

  string s;
  while (cin >> s) {
    if (s == "#")
      break;

    int pa = 0, pb = 0, ga = 0, gb = 0;
    for (char c : s) {
      if (c == 'A') pa++;
      else if (c == 'B') pb++;

      if (pa >= 4 && pa - pb >= 2) {
        ga++;
        pa = pb = 0;
      }
      else if (pb >= 4 && pb - pa >= 2) {
        gb++;
        pa = pb = 0;
      }
    }
    cout << "A " << ga << " B " << gb << "\n";
  }

  return 0;
}

Tags: 7597, BOJ, C#, C++, 구현, 백준, 시뮬레이션, 알고리즘

Categories: ,