※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2852번 문제인 NBA 농구이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2852
2852번: NBA 농구
첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다. 둘째 줄부터 N개의 줄에 득점 정보가 주어진다. 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다. 팀 번호는 1 또는 2이다. 득
www.acmicpc.net
새로 점수가 나는 순간마다 (1) 그 시점 직전까지 점수를 앞서나가던 팀이 존재한다면 그 팀의 점수를 앞서나가던 기간을 갱신하고 (2) 점수를 새로 갱신해나가는 것을 반복해 문제를 해결하자. 단, 마지막으로 점수가 난 다음 경기가 끝날 때까지의 시간은 위 과정에서 처리하지 않으므로 별도로 처리해주자.
문제의 답을 출력할 때 MM:SS의 출력 형식을 지켜야 함에 유의하자. 예를 들어 답으로 01:02를 출력해야 하는 경우에 1:2를 출력해 오답을 받지 않도록 유의하자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int Q;
int team, oldT; string s;
int scr1, scr2, ans1, ans2;
int m1, s1, m2, s2;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> Q;
while (Q--) {
cin >> team >> s;
int T = stoi(s.substr(0, 2)) * 60 + stoi(s.substr(3, 2));
if (scr1 > scr2) ans1 += T - oldT;
else if (scr1 < scr2) ans2 += T - oldT;
oldT = T;
if (team == 1) scr1++;
else scr2++;
}
if (scr1 > scr2) ans1 += 2880 - oldT;
else if (scr1 < scr2) ans2 += 2880 - oldT;
m1 = ans1 / 60, s1 = ans1 % 60;
if (m1 < 10) cout << 0;
cout << m1 << ':';
if (s1 < 10) cout << 0;
cout << s1 << '\n';
m2 = ans2 / 60, s2 = ans2 % 60;
if (m2 < 10) cout << 0;
cout << m2 << ':';
if (s2 < 10) cout << 0;
cout << s2 << '\n';
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 3340 // C++] Multi-key Sorting (0) | 2023.12.27 |
---|---|
[BOJ 2942 // C++] 퍼거슨과 사과 (1) | 2023.12.26 |
[BOJ 3018 // C++] 캠프파이어 (0) | 2023.12.24 |
[BOJ 4649 // C++] Tanning Salon (0) | 2023.12.23 |
[BOJ 4335 // C++] 숫자 맞추기 (1) | 2023.12.22 |