농구 경기에서 골을 넣은 팀과 그때의 시간이 주어질 때, 1번 팀과 2번 팀이 이기고 있던 시간을 각각 출력하는 문제.
만약 득점을 한 팀이 현재 이기고 있는 팀이라면, 그 팀의 시간에 입력받은 시간을 반영시켜 더한다. 마지막에는 리드 팀에게 종료 시간을 반영시킨 뒤 1, 2번 각각의 팀이 이기고 있던 시간을 출력한다.
시간 연산의 편의를 위한 자료형 변환이 요구되는 문제다.
stoi
, substr
등의 함수 이용이 요구되며, 마지막 print
함수에서는 형식에 알맞은 시간 표현을 위하여, 시간 앞에 "00"을 추가한 뒤 substr
을 이용하여 다시 잘라낸다.
#include <bits/stdc++.h>
using namespace std;
#define prev sub
int n, t, A, B, scoreA, scoreB;
string s, prev;
string print(int time) {
string a = "00" + to_string(time / 60);
string b = "00" + to_string(time % 60);
return a.substr(a.size() - 2, 2) + ':' + b.substr(b.size() - 2, 2);
}
int changeToInt(string time) {
return stoi(time.substr(0, 2)) * 60 + stoi(time.substr(3, 2));
}
int go(string time) {
return changeToInt(time) - changeToInt(prev);
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> t >> s;
if (A > B) scoreA += go(s);
else if (A < B) scoreB += go(s);
t == 1 ? A++ : B++;
prev = s;
}
if (A > B) scoreA += go("48:00");
if (A < B) scoreB += go("48:00");
cout << print(scoreA) << '\n';
cout << print(scoreB) << '\n';
return 0;
}