작성일 :

문제 링크

14582번 - 오늘도 졌다

설명

야구 경기의 이닝별 득점이 주어지는 상황에서, 울림 제미니스 팀의 9개 이닝 득점과 스타트링크 팀의 9개 이닝 득점이 주어질 때, 울림 제미니스가 경기 중 한 번이라도 리드했는지 확인하는 문제입니다.

경기는 1회초부터 9회말까지 진행됩니다. 회초에는 울림 제미니스가 공격하고, 회말에는 스타트링크가 공격합니다. 울림 제미니스는 최종적으로 패배하지만, 경기 도중 한 번이라도 리드한 적이 있다면 “역전패”가 됩니다. 역전패면 Yes를, 아니면 No를 출력합니다.


접근법

이닝을 순서대로 진행하면서 각 시점의 누적 점수를 계산하고, 울림 제미니스가 리드하는 순간이 있는지 확인합니다.


먼저 두 팀의 누적 점수를 관리할 변수를 준비합니다. 1회초부터 9회말까지 순서대로 진행하면서, 회초에는 울림 제미니스의 득점을 누적 점수에 더하고, 회말에는 스타트링크의 득점을 누적 점수에 더합니다.

중요한 것은 각 회초에서 울림 제미니스가 득점한 직후, 회말 스타트링크가 득점하기 전에 누적 점수를 비교하는 것입니다. 이때 울림 제미니스의 누적 점수가 스타트링크의 누적 점수보다 크다면 리드한 것입니다.

이렇게 9회까지 진행하면서 한 번이라도 리드한 순간이 있었다면 Yes를, 한 번도 리드하지 못했다면 No를 출력합니다.


예를 들어, 울림 제미니스가 [1, 2, 0, 0, 0, 0, 0, 0, 0], 스타트링크가 [0, 0, 0, 3, 0, 0, 0, 0, 0]인 경우:

1회초 후 울림 제미니스 1 - 스타트링크 0으로 리드합니다. 1회말 후에도 1 - 0입니다. 2회초 후 3 - 0으로 계속 리드합니다. 4회초까지 3 - 0이었다가 4회말 후 3 - 3으로 동점이 되고, 최종적으로 울림 제미니스가 패배합니다. 하지만 경기 중 리드한 적이 있으므로 Yes를 출력합니다.


각 이닝을 한 번씩만 확인하므로 시간 복잡도는 O(1)입니다. (고정된 9회)



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

namespace Solution {
  class Program {
    static void Main(string[] args) {
      var zScores = Array.ConvertAll(Console.ReadLine()!.Split(), int.Parse);
      var gScores = Array.ConvertAll(Console.ReadLine()!.Split(), int.Parse);

      var sumZ = 0;
      var sumG = 0;
      var everLed = false;

      for (var i = 0; i < 9; i++) {
        sumZ += zScores[i];
        if (sumZ > sumG) {
          everLed = true;
          break;
        }
        sumG += gScores[i];
      }

      Console.WriteLine(everLed ? "Yes" : "No");
    }
  }
}

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

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

  int zScores[9], gScores[9];
  for (int i = 0; i < 9; i++)
    cin >> zScores[i];
  for (int i = 0; i < 9; i++)
    cin >> gScores[i];

  int sumZ = 0, sumG = 0;
  bool everLed = false;

  for (int i = 0; i < 9; i++) {
    sumZ += zScores[i];
    if (sumZ > sumG) {
      everLed = true;
      break;
    }
    sumG += gScores[i];
  }

  cout << (everLed ? "Yes" : "No") << "\n";

  return 0;
}