구현
이전의 시간 값을 저장해두었다가 조건을 만족하는 경우, 이전 시간 값을 참조하여 현재 변화를 업데이트한다.
시간적인 부분은 모두 초로 바꾸어 계산하였다. 이후 다시 시간을 반환할 때는 60으로 나누어 몫을 시간으로 나머지를 초로 만들어주면 된다.
printf()
라는 매우 좋은 방법이 있었다.#include <iostream>
#include <vector>
#include <string>
using namespace std;
int N, A = 0, B = 0, A_win = 0, B_win = 0;;
vector<string> split(string str, string deli) {
vector<string> ret;
int pos = 0;
while ((pos = str.find(deli)) != string::npos) {
ret.push_back(str.substr(0, pos));
str.erase(0, pos + deli.length());
}
ret.push_back(str);
return ret;
}
void solve() {
cin >> N;
int team;
string time;
int prev_time = 0;
for (int i = 0; i < N; i++) {
cin >> team >> time;
vector<string> temp = split(time, ":");
int curr_time = stoi(temp[0]) * 60 + stoi(temp[1]);
if (A > B) {
A_win += curr_time - prev_time;
} else if (A < B) {
B_win += curr_time - prev_time;
}
team == 1 ? A++ : B++;
prev_time = curr_time;
}
if (A > B) {
A_win += 48 * 60 - prev_time;
} else if (B > A) {
B_win += 48 * 60 - prev_time;
}
// string result_A_min =
// to_string(A_win / 60) == "0" ? "00" : A_win / 60 < 10 ? ("0" + to_string(A_win / 60)) : to_string(
// A_win / 60);
// string result_B_min =
// to_string(B_win / 60) == "0" ? "00" : B_win / 60 < 10 ? ("0" + to_string(B_win / 60)) : to_string(
// B_win / 60);
// string result_A_sec =
// to_string(A_win % 60) == "0" ? "00" : A_win % 60 < 10 ? ("0" + to_string(A_win % 60)) : to_string(
// A_win % 60);
// string result_B_sec =
// to_string(B_win % 60) == "0" ? "00" : B_win % 60 < 10 ? ("0" + to_string(B_win % 60)) : to_string(
// B_win % 60);
// string result_A = result_A_min + ":" + result_A_sec;
// string result_B = result_B_min + ":" + result_B_sec;
// cout << result_A << "\n" << result_B;
printf("%02d:%02d\n", A_win / 60, A_win % 60);
printf("%02d:%02d", B_win / 60, B_win % 60);
}
int main() {
solve();
}