안녕하세요, 이번 포스팅에서는 C언어 문제를 풀어보는 시간을 가지려고 합니다.
| 지난 강좌 Review
지난 강좌 보기: [C언어_05] 다양한 조건문 (if, if...else, if...else if...else, switch)
지난 시간에는 C언어의 다양한 조건문의 형태를 배워보았습니다.
이번에는 지난 강좌에서 배웠던 내용을 다루는 문제를 가져와 봤습니다.
| C언어 문제
| 문제 해석
문제를 같이 보겠습니다.
이 문제의 핵심은 바로 45분 일찍 알람을 설정하는 것입니다.
상근이가 설정한 알람을 입력하고 그 알람을 45분 일찍 설정하여 출력하는 프로그램을 만들어야 합니다.
| Case 분류
#1. 먼저 일반적인 상황을 살펴봅시다.
만약 설정한 알람시간이 4시 50분 이라고 가정해 봅시다.
그러면 출력해야 되는 시간은 4시 5분이 되겠지요.
즉 50 - 45 = 5분이 계산되는 겁니다.
만약 설정한 알람시간이 4시 45분 이면?
역시 45-45 = 0분 즉 4시 정각이 출력되야 합니다.
만약 설정한 시간이 4시 30분 이면?
출력되는 시간은 3시 45분임을 누구나 알수 있습니다.
3시 45분은 어떻게 출력해야 할까요?
#2. 그럼 특수한 경우를 살펴 볼까요?
만약 알람시간이 0시 35분 이면?
출력되는 시간은 당연히 11시 50분이 될것입니다.
이 과정은 어떻게 이루어져야 할까요?
| 프로그램 설계
앞에서 살펴본 내용을 통해 우리는 조건문을 활용해야 한다는 것을 알 수 있습니다.
조건들을 하나씩 하나씩 살펴보겠습니다.
#1 : 분이 45분 이상인 경우
그러면 간단하게 분에 45를 뺀 값을 출력하면 되겠지요.
이를 코드로 나타내보면
int HOUR, MINUTE;
if(MINUTE >= 45) /* 분이 45분 이상인 경우 */
MINUTE = MINUTE - 45;
printf("%d %d", HOUR, MINUTE);
이와 같이 나타낼 수 있을 것 입니다.
#2 : 만약 시간이 0보다 크고 분이 45분 미만인 경우
그러면 먼저 시간에 1을 빼줍니다.
1시간은 60분 이므로
분에 60분을 더하고 45분을 빼주면 되겠습니다.
이를 코드로 나타내보면
int HOUR, MINUTE;
if( HOUR > 0 && MINUTE < 45){
HOUR = HOUR - 1; //시간에 1을 빼주고
MINUTE = MINUTE + 60; //분에 60분을 더한 다음
MINUTE = MINUTE + 45; //분에 45분을 빼줍니다.
printf("%d %d", HOUR, MINUTE);
}
이와 같이 나타낼 수 있을 것 입니다.
#3 : 만약 시간이 0시이고 분이 45분 미만인 경우
그러면 시간은 23시가 될것이고
Case #2와 마찬가지로 분에 60분을 더한 다음
45분을 빼주면 되겠습니다.
이를 코드로 나타내보면
int HOUR, MINUTE;
if( HOUR == 0 && MINUTE < 45){
HOUR = 23; //시간은 23시가 될것이고
MINUTE = MINUTE + 60; //분에 60분을 더한 다음
MINUTE = MINUTE - 45; //45분을 빼줍시다.
printf("%d %d", HOUR, MINUTE);
}
이와 같이 나타낼 수 있을 것 입니다.
| 프로그램 작성
먼저 scanf로 시간과 분을 먼저 받아옵시다.
scanf("%d:%d", &HOUR, &MINUTE);
그리고 전에 배운 if, else if문을 사용하여 조건들을 나열해 봅시다.
if(MINUTE<45 && HOUR>0){
HOUR = HOUR - 1;
MINUTE = MINUTE + 60;
MINUTE = MINUTE - 45;
}
else if(MINUTE<45 && HOUR==0){
HOUR = 23;
MINUTE = MINUTE + 60;
MINUTE = MINUTE - 45;
}
else if(MINUTE>=45){
MINUTE = MINUTE - 45;
}
그리고 마지막에 결과값을 출력하면
printf("%d:%d", HOUR,MINUTE);
프로그램이 완성이 될 것입니다.
| 프로그램 실행
앞의 과정대로 만들어진 코드는 다음과 같습니다.
#include <stdio.h>
int main(){
int HOUR,MINUTE;
scanf("%d:%d", &HOUR, &MINUTE);
if(MINUTE<45 && HOUR>0){
HOUR = HOUR - 1;
MINUTE = MINUTE + 60;
MINUTE = MINUTE - 45;
}
else if(MINUTE<45 && HOUR==0){
HOUR = 23;
MINUTE = MINUTE + 60;
MINUTE = MINUTE - 45;
}
else if(MINUTE>=45){
MINUTE = MINUTE - 45;
}
printf("%d:%d", HOUR,MINUTE);
return 0;
}
Visual Studio에서 CTRL + F5키를 눌러 실행해 봅시다.
프로그램에 4:50분을 입력해보겠습니다.
값이 정상적으로 출력되는 것을 확인할 수 있습니다.
그러면 프로그램에 0:35분을 입력해볼까요?
마찬가지로 정상적으로 값이 출력되는 것을 확인할 수 있습니다.
| 마무리
이상으로 C언어 문제풀이 #2를 마치겠습니다.
문제를 풀때는 하나하나 과정을 따라가는 것이 이해하기도 쉽고, 빠릅니다.
C언어 문제 풀이 과정이 도움이 되었으면 좋겠습니다.
감사합니다.
'C언어 강좌' 카테고리의 다른 글
[C언어_08] 중첩 반복문/무한루프: 문제풀이에 어떻게 응용하는가 (0) | 2020.11.02 |
---|---|
[C언어_07] 반복문(while / for), continue, break (0) | 2020.11.01 |
[C언어_05] 다양한 조건문 (if, if...else, if...else if...else, switch) (0) | 2020.10.11 |
[C언어_04] C언어의 다양한 연산자 & 참, 거짓 (0) | 2020.10.09 |
[C언어_03] C언어 문제 풀이 #1 (0) | 2020.10.05 |