문제 개요
C 언어를 사용하여 24시간제(HH:MM)로 입력된 시간을 12시간제(오전/오후 표기)로 변환하는 방법을 알아보겠습니다.
해결 방법
실행 시점에 사용자로부터 시간 값을 입력받은 뒤, 조건문(if ~ else if ~ else)을 활용해 이를 12시간제 형식으로 변환하여 출력합니다.
알고리즘
시작:
1단계: 24시간제 형식으로 시간 입력
2단계: 조건 검사
i. hour == 0이면
12와 분(min) 출력 (오전)
ii. hour < 12이면
hour와 min 출력 (오전)
iii. hour == 12이면
hour와 min 출력 (오후)
iv. 그 외의 경우
(hour % 12)와 min 출력 (오후)
종료:
프로그램 코드
#include<stdio.h>
int main(){
int hr,min;
printf("enter the time in 24 hour format:");
scanf("%d:%d",&hr,&min);
printf("The 12 hr format time:");
if(hr==0){
printf("12:%.2d AM\n",min);
}
else if(hr<12){
printf("%d:%.2d AM\n",hr,min);
}
else if(hr==12){
printf("%d:%.2d PM\n",hr,min);
}
else
printf("%d:%.2d PM\n",hr % 12,min);
return 0;
}
코드 설명
먼저 scanf 함수로 시(hour)와 분(min)을 각각 정수형 변수에 입력받습니다. 이후 조건문을 통해 다음과 같이 처리됩니다.
- hour가 0일 때: 자정(00:00)이므로 '12'로 바꾸어 오전(AM)으로 출력합니다.
- hour가 12 미만일 때: 오전 시간이므로 입력값 그대로 AM과 함께 출력합니다.
- hour가 정확히 12일 때: 정오이므로 오후(PM)로 출력합니다.
- 그 외(13~23)일 때: 나머지 연산자
%를 이용해hr % 12를 계산하면 12시간제 시각이 되며, PM과 함께 출력합니다.
출력 시 %.2d 서식 지정자를 사용하면 분 값이 한 자리 수일 때도 앞에 0이 채워져 항상 두 자리로 표시됩니다(예: 10:05).
실행 결과
enter the time in 24 hour format:22:37
The 12 hr format time:10:37 PM
위 예시에서 24시간제인 22시 37분을 입력하면, 22 % 12 = 10이 계산되어 오후 10시 37분(PM)으로 올바르게 변환된 것을 확인할 수 있습니다.