[알고리즘] 백준 2852 - NBA 농구

홍예주·2022년 10월 7일
0

알고리즘

목록 보기
80/92

1. 문제

링크텍스트

2. 입력/출력

동혁이는 NBA 농구 경기를 즐겨 본다. 동혁이는 골이 들어갈 때 마다 골이 들어간 시간과 팀을 적는 이상한 취미를 가지고 있다.
농구 경기는 정확히 48분동안 진행된다. 각 팀이 몇 분동안 이기고 있었는지 출력하는 프로그램을 작성하시오.

첫째 줄에 1번 팀이 이기고 있던 시간, 둘째 줄에 2번 팀이 이기고 있던 시간을 출력한다. 시간은 입력과 같은 형식(MM:SS)으로 출력한다.

3. 풀이

골을 넣은 시간이 들어올 때 이전 골이 들어온 시간까지의 이긴 시간을 갱신해준다.

cin/scanf

풀면서 알고리즘보단 입출력에서 애를 먹었다.
문제를 풀면서 알게 된 사실은 다음과 같다.

cin.tie(0);
cou.tie(0);
cin.sync_with_stdio(0);

를 쓰고 cin과 scanf를 같이 쓰면 의도치 않은 결과가 발생할 수 있다고 한다.

cin과 scanf를 동시에 쓰고 싶다면 저 3줄의 코드는 지우고
#pragma warning (disable:4996)를 #include 다음에 작성하면 된다.

4. 코드


#include <iostream>
#pragma warning (disable:4996)
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int n;


int main()
{
	cin >> n;

	int team;
	int min,sec;
	int scoreA=0, scoreB = 0;
	int timeA=0, timeB = 0;

	int cur = 0;

	for (int i = 0; i < n; i++) {

		cin >> team;
		scanf("%2d:%2d", &min,&sec);

		if (scoreA > scoreB) {
			timeA += min * 60 + sec - cur;
		}
		else if (scoreA < scoreB) {
			timeB += min * 60 + sec - cur;
		}

		if (team == 1) {
			scoreA++;
		}
		else {
			scoreB++;
		}

		cur = min * 60 + sec;
	}

	if (scoreA > scoreB) {
		timeA += 2880 - cur;
	}
	else if (scoreA < scoreB) {
		timeB += 2880 - cur;
	}


	printf("%02d:%02d\n", timeA / 60, timeA % 60);
	printf("%02d:%02d\n", timeB / 60, timeB % 60);

    return 0;
}
profile
기록용.

0개의 댓글