농구 경기에서 골을 넣은 팀과 그때의 시간이 주어질 때, 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;
}