시(hour), 분(minute), 초(second) 형태로 주어진 두 개의 시간 구간이 있을 때, 이 둘의 차이를 계산할 수 있습니다. 예를 들어 다음과 같습니다.
시간 구간 1 = 8:6:2 시간 구간 2 = 3:9:3 시간 차이 = 4:56:59
아래에서는 두 시간 구간의 차이를 계산하는 프로그램을 소개합니다.
예제 코드
#include <iostream>
using namespace std;
int main() {
int hour1, minute1, second1;
int hour2, minute2, second2;
int diff_hour, diff_minute, diff_second;
cout << "첫 번째 시간 구간 입력" << endl;
cout << "시, 분, 초를 순서대로 입력하세요: " << endl;
cin >> hour1 >> minute1 >> second1;
cout << "두 번째 시간 구간 입력" << endl;
cout << "시, 분, 초를 순서대로 입력하세요: " << 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 << "시간 차이는 " << diff_hour << ":" << diff_minute << ":" << diff_second;
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
첫 번째 시간 구간 입력 시, 분, 초를 순서대로 입력하세요: 7 6 2 두 번째 시간 구간 입력 시, 분, 초를 순서대로 입력하세요: 5 4 3 시간 차이는 2:1:59
코드 동작 원리
위 프로그램은 먼저 사용자로부터 두 개의 시간 구간을 각각 시, 분, 초 단위로 입력받습니다.
cout << "첫 번째 시간 구간 입력" << endl; cout << "시, 분, 초를 순서대로 입력하세요: " << endl; cin >> hour1 >> minute1 >> second1; cout << "두 번째 시간 구간 입력" << endl; cout << "시, 분, 초를 순서대로 입력하세요: " << endl; cin >> hour2 >> minute2 >> second2;
그다음, 아래 코드 조각에 나타난 방식으로 두 시간 구간의 차이를 계산합니다. 핵심 아이디어는 자릿수 내림(borrowing)입니다. 빼려는 값이 더 클 경우, 상위 자리에서 1을 빌려와 60을 더해 계산을 진행합니다.
if(second2 > second1) {
minute1--;
second1 += 60;
}
diff_second = second1 - second2;
if(minute2 > minute1) {
hour1--;
minute1 += 60;
}
diff_minute = minute1 - minute2;
diff_hour = hour1 - hour2;- 초 계산: second2가 second1보다 크면 minute1에서 1을 빼고 second1에 60을 더한 뒤 차이를 구합니다.
- 분 계산: minute2가 minute1보다 크면 hour1에서 1을 빼고 minute1에 60을 더한 뒤 차이를 구합니다.
- 시 계산: hour1에서 hour2를 빼면 최종 시간 차이가 됩니다.
마지막으로 계산된 시간 차이를 화면에 출력합니다.
cout << "시간 차이는 " << diff_hour << ":" << diff_minute << ":" << diff_second;
정리
이 프로그램은 일상적인 시·분·초 연산에서 흔히 사용되는 '빌려오기' 방식을 그대로 코드로 옮긴 것입니다. 시간 데이터를 정수형 변수로 다루며, 자리 올림 상황만 적절히 처리하면 누구나 쉽게 두 시간 구간의 차이를 구할 수 있습니다. 실무에서는 이러한 로직을 함수로 분리하거나, 표준 라이브러리인 <chrono>를 활용해 더 안전하고 유연하게 구현할 수도 있습니다.