Computer Science/Algorithm Problem

백준] 3029 - 경고(COCI 2006/2007)

TwinParadox 2019. 2. 18. 18:45
728x90

시간 제한 : 1초

메모리 제한 : 128MB




입력

첫째 줄에 현재 시간이 hh:mm:ss 형식으로 주어진다. (시, 분, 초) hh는 0보다 크거나 같고, 23보다 작거나 같으며, 분과 초는 0보다 크거나 같고, 59보다 작거나 같다.

둘째 줄에는 나트륨을 던질 시간이 위와 같은 형식으로 주어진다.




출력

첫째 줄에 정인이가 기다려야 하는 시간을 입력과 같은 형식으로 출력한다.




소스코드

#include <iostream>
#include <string>
using namespace std;
int main(void)
{
	string start, end;
	int s[3], e[3], ans[3];
	cin >> start;
	cin >> end;
	s[0] = stoi(start.substr(0, 2));
	s[1] = stoi(start.substr(3, 2));
	s[2] = stoi(start.substr(6, 2));
	e[0] = stoi(end.substr(0, 2));
	e[1] = stoi(end.substr(3, 2));
	e[2] = stoi(end.substr(6, 2));

	if (e[2] >= s[2])
		ans[2] = e[2] - s[2];
	else
		ans[2] = 60 + e[2] - s[2], e[1]--;
	if (e[1] >= s[1])
		ans[1] = e[1] - s[1];
	else
		ans[1] = 60 + e[1] - s[1], e[0]--;
	if (e[0] >= s[0])
		ans[0] = e[0] - s[0];
	else
		ans[0] = 24 + e[0] - s[0];

	if (ans[2] == 0 && ans[1] == 0 && ans[0] == 0)
		ans[0] = 24;

	for (int i = 0; i < 3; i++)
	{
		if (ans[i] < 10)
			cout << '0' << ans[i];
		else
			cout << ans[i];
		if (i != 2)
			cout << ':';
	}
}




Tip

실질적으로 다른 타이머 문제와 크게 차이는 없는데 문제 조건에 있는 적어도 1초를 기다리며, 많아야 24시간을 기다린다를 주의해야 한다. 이 조건을 잘 찌르는 케이스가 바로 00:00:00과 00:00:00이 조건으로 들어온 경우다. 답이 24:00:00이 나와야 하는데 00:00:00이 나오는 케이스들이 해당된다.



728x90
728x90