문제 개요
'HH:MM:SS' 형식의 문자열로 표현된 두 시간 구간이 주어집니다. 여기서 'HH'는 시(hour), 'MM'은 분(minute), 'SS'는 초(second)를 나타냅니다. 이 두 시간 구간 사이의 차이를 동일한 문자열 형식으로 구하는 것이 이번 문제의 목표입니다.
시간 구간 1 = 8:6:2 시간 구간 2 = 3:9:3 두 시간의 차이 = 4:56:59
동작 원리
시간 차이를 계산할 때는 일반적인 뺄셈과 마찬가지로 낮은 자리부터 비교하며, 필요한 경우 상위 자리에서 값을 빌려오는(자리내림) 방식을 사용합니다.
- 초 단위 처리: 두 번째 시간의 초가 첫 번째 시간의 초보다 크면, 첫 번째 시간의 분에서 1을 빼고 초에 60을 더해 계산합니다.
- 분 단위 처리: 마찬가지로 두 번째 시간의 분이 더 크면, 첫 번째 시간의 시에서 1을 빼고 분에 60을 더합니다.
- 시 단위 처리: 위 과정이 끝나면 각 단위별로 단순히 뺄셈을 수행합니다.
예제 코드
다음은 C++로 작성된 프로그램으로, 사용자로부터 두 시간 구간을 입력받아 그 차이를 계산하고 출력합니다.
#include <iostream>
using namespace std;
int main() {
int hour1, minute1, second1;
int hour2, minute2, second2;
int diff_hour, diff_minute, diff_second;
cout << "Enter time period 1" << endl;
cout << "Enter hours, minutes and seconds respectively: "<< endl;
cin >> hour1 >> minute1 >> second1;
cout << "Enter time period 2" << endl;
cout << "Enter hours, minutes and seconds respectively: "<< endl;
cin >> hour2 >> minute2 >> second2;
if(second2 > second1) {
minute1--;
second1 += 60;
}
diff_second = second1 - second2;
if(minute2 > minute1) {
hour1--;
minute1 += 60;
}
diff_minute = minute1 - minute2;
diff_hour = hour1 - hour2;
cout <<"Time Difference is "<< diff_hour <<":"<< diff_minute <<":"<<diff_second;
return 0;
}실행 결과
Enter time period 1 Enter hours, minutes and seconds respectively: 7 6 2 Enter time period 2 Enter hours, minutes and seconds respectively: 5 4 3 Time Difference is 2:1:59
정리
이 방법은 시·분·초를 각각 정수 변수로 다루면서, 뺄셈 과정에서 발생하는 자리내림을 조건문으로 처리하는 것이 핵심입니다. 코드가 단순하지만 시간 연산의 기본 원리를 이해하는 데 매우 유용한 예제이며, 이를 확장하면 날짜 차이 계산이나 타이머 기능 구현에도 응용할 수 있습니다.