BOJ 16863, Score!

구현

BOJ 16863, Score!

단순 구현문제입니다.

풀이

문제 자체가 어려운 문제는 아니지만 처리해줘야할 부분이 많아서 상당히 힘들게 풀었다.

total은 총 점수, lead는 앞서고 있었던 총 시간, ns는 현재 득점 시, nb는 현재 득점 분, ls는 직전 득점 시, lb는 직전 득점 분, leadteam은 이기고있는 팀이다.

변수들만 잘 정리하고 문제만 잘 이해한다면 어려운 문제는 아니다. 하지만 나처럼 헤맬 사람들이 있을 것 같아서 포스팅하기로 했다! 구현연습하기에 나쁘지 않은 문제같다.

​한번정도 풀길 추천하는 문제입니다. ​

#include<cstring>
#include<string>
#include<algorithm>
#include<iostream>
#include<stdio.h>
#include<vector>
#include<cmath>
using namespace std;
int totala, totalh,alead,hlead, ns, nb, ls, lb, hscore, ascore;
char c,leadteam;
int main()
{
	int n;
	scanf("%d",&n);
	for (int i = 0; i < n; i++)
	{
		scanf(" %c",&c);
		if (totala > totalh)
			leadteam = 'a';
		if (totala < totalh)
			leadteam = 'h';
		if (totala == totalh)
			leadteam = ' ';
		if (c == 'H')
		{
			scanf("%d", &hscore);
			totalh += hscore;
		}
		if (c == 'A')
		{
			scanf("%d", &ascore);
			totala += ascore;
		}
		scanf("%d:%d", &ns, &nb);
		if (leadteam == 'a')
			alead += (60 * ns + nb) - (60 * ls + lb);
		if (leadteam == 'h')
			hlead += (60 * ns + nb) - (60 * ls + lb);
		ls = ns, lb = nb;
	}
	if (totalh > totala)
	{
		printf("H");
		hlead += (60 * 32) - (60*ls+lb);
	}
	else
	{
		printf("A");
		alead += (60 * 32) - (60 * ls + lb);
	}
	if(hlead%60<10)
		printf(" %d:0%d", hlead / 60, hlead % 60);
	else
		printf(" %d:%d", hlead / 60, hlead % 60);
	if (alead % 60 < 10)
		printf(" %d:0%d", alead / 60, alead % 60);
	else
		printf(" %d:%d", alead / 60, alead % 60);
	return 0;
}

출처 : https://www.acmicpc.net/problem/16863