1팀 VS 2팀 경기의 득점 정보를 입력받고, 이를 기반으로 각 팀이 몇분, 몇초 동안 승리를 유지하고 있었는지를 출력하는 문제이다.
이 문제의 포인트는 3가지이다.
(1) scnaf()로 시간, 분 나누어 입력받기
(2) 분:초 형식의 시간 계산시 분*60+초 로 가장 작은 단위로 통일하여 계산하기
(3) %02d 형식지정자를 활용해서 2자리 분:2자리 초 형식으로 출력하기
위의 포인트를 잘 알고있으면 문제를 쉽게 풀 수 있다.
#include <bits/stdc++.h>
using namespace std;
int cnt_1; // 1
int cnt_2; // 2
int time_1;
int time_2;
int main() {
int n,t, m, s;
scanf("%d", &n); //3
int prev_time = -1 ;
while(n--) {
scanf("%d %d:%d", &t, &m, &s);
int curr_time = 60*m+s;
if(prev_time != -1 && cnt_1 != cnt_2) {
int diff_time = curr_time-prev_time;
if(cnt_1 > cnt_2) time_1+=diff_time;
else time_2+=diff_time;
}
if(t==1) cnt_1++;
else cnt_2++;
prev_time = curr_time; // 31:30
}
if(cnt_1!=cnt_2) (cnt_1 > cnt_2) ? time_1+=48*60-prev_time : time_2+=48*60-prev_time;
//cout << get_time_out(time_1) << '\n' << get_time_out(time_2);
printf("%02d:%02d\n%02d:%02d", time_1/60, time_1%60, time_2/60, time_2%60);
return 0;
}
문제와 같이 입력,출력 조건이 까다롭고, string으로 받아서 parsing하기 번거로운 경우에는 scanf()를 적절한 형식 지정자와 함께 사용하는것이 훨씬 편하다.
이 문제에서는 시간이분:초(2가지 단위의 혼합)로 주어진다. 이런 경우 계산의 편리성을 위하여 초로 시간의 단위를 통일하고 전부 계산한 다음에 나머지 연산, 모듈러 연산을 통해 값을 출력하는 것이 효율적이다.