본문 바로가기

C언어 강좌

[C언어_06] C언어 문제 풀이 #2

안녕하세요, 이번 포스팅에서는 C언어 문제를 풀어보는 시간을 가지려고 합니다.

 

지난 강좌 Review

지난 강좌 보기: [C언어_05] 다양한 조건문 (if, if...else, if...else if...else, switch)

 

[C언어_05] 다양한 조건문 (if, if...else, if...else if...else, switch)

안녕하세요, 이번 포스팅에서는 다양한 조건문에 대해서 알아보는 시간을 갖도록 하겠습니다. 조건문도 여러가지 구조가 존재하는데요, 어떤 상황에서 어떤 구조의 조건문을 사용해야 하는지��

swdoodle.tistory.com

지난 시간에는 C언어의 다양한 조건문의 형태를 배워보았습니다.

 

이번에는 지난 강좌에서 배웠던 내용을 다루는 문제를 가져와 봤습니다.

 

C언어 문제

 

출처- www.acmicpc.net/problem/2884

문제 해석

문제를 같이 보겠습니다.

 

이 문제의 핵심은 바로 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언어 문제 풀이 과정이 도움이 되었으면 좋겠습니다.

 

감사합니다.