[c++] 백준 2852, NBA 농구

김현섭·2023년 7월 20일
1

[C++] 백준

목록 보기
19/36

백준 2852

🌲 문제 요약

농구 경기에서 골을 넣은 팀과 그때의 시간이 주어질 때, 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;
}
profile
오롯이 밤길을 달래는 별에게로

0개의 댓글