static char * solution(void)
{
static char buf[16];
string s1, s2;
int h[3], m[3], s[3];
cin >> s1 >> s2;
h[0] = (s1[0] - '0') * 10 + (s1[1] - '0');
m[0] = (s1[3] - '0') * 10 + (s1[4] - '0');
s[0] = (s1[6] - '0') * 10 + (s1[7] - '0');
h[1] = (s2[0] - '0') * 10 + (s2[1] - '0');
m[1] = (s2[3] - '0') * 10 + (s2[4] - '0');
s[1] = (s2[6] - '0') * 10 + (s2[7] - '0');
if ((s[2] = s[1] - s[0]) < 0)
{
s[2] += 60;
m[1] -= 1; //분에서 하나 가져옴
}
if ((m[2] = m[1] - m[0]) < 0)
{
m[2] += 60; //시간에서 하나 가져옴
h[1] -= 1;
}
if ((h[2] = h[1] - h[0]) < 0)
{
h[2] += 24; //보정
}
sprintf(buf, "%02d:%02d:%02d", h[2], m[2], s[2]);
return buf;
}
일단 기본적인 개념은 약속 시간에서 현재 시간을 빼서 남은 시간을 구하는 것이다.
그러나 한가지 고려해야할 부분이 있는데, 약속 시각이 내일인 경우이다.
현재 시각 == 04:00:00, 약속 시각이 == 01:00:00 이라면
남은 시간은 25:00:00 - 04:00:00 == 21:00:00 으로 처리해야 한다는 점이다.
그래서 이에 대한 처리가 마지막 if 문이다.