알고리즘/백준

[백준] 2852 NBA 농구 C++

CGNY 2025. 3. 14. 11:38

https://www.acmicpc.net/problem/2852


풀이

 

농구 골 넣는 문제이다.

포인트는 '분 -> 초'로 단위로 단위 통일 인듯하다.

 

분끼리 계산 & 초끼리 계산하면 복잡하기 때문에 단위를 통일해주고

이긴 시간을 누적해주어야 하기 때문에 prev라는 변수를 통해 이전에 골을 넣은 시간을 추적해준다.

그리고 분 & 초를 초단위로 변경 및 출력하기 위해 substr를 사용해주도록 하자.

 

1. 초로 단위 통일

2. 이긴 팀 변수 증가

3. 골을 넣은 시간(prev)로 추적

4. 이긴 팀의 시간을 계산하여 누적

5. substr로 출력

 


코드

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
using ll = long long;
#define prev ppp1
#define visit ppp2

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	int n; cin >> n;
	int prev = -1, team = 0, A = 0, B = 0, asum = 0, bsum = 0;
	string str;
	for (int i = 0; i < n; ++i)
	{
		cin >> team >> str;
		
		int sec = stoi(str.substr(0, 2)) * 60 + stoi(str.substr(3));
		if (i > 0)
		{
			if (A > B) asum += sec - prev;
			else if (B > A) bsum += sec - prev;
		}
		
		team == 1 ? A++ : B++;
		prev = sec;
	}
	
	if (A > B) asum += (47 * 60 + 60) - prev;
	else if (B > A) bsum += (47 * 60 + 60) - prev;
	
	string astr1 = "00" + to_string(asum / 60);
	string astr2 = "00" + to_string(asum % 60);
	string bstr1 = "00" + to_string(bsum / 60);
	string bstr2 = "00" + to_string(bsum % 60);
	
	cout << astr1.substr(astr1.size() - 2) << ":" << astr2.substr(astr2.size() - 2) << endl;
	cout << bstr1.substr(bstr1.size() - 2) << ":" << bstr2.substr(bstr2.size() - 2) << endl;
}