기본적인 시간 계산 문제이다.

 

문제에서 요하는건

  입력값 출력값
1번 경우 17 40 0 14 33 20
200
2번 경우 17 40 45 19 21 0
6017
3번 경우 23 48 59 0 30 54
2515

 

다음과 같이 출력되는 것이며 조건은 다음과 같습니다

 

생각을 잠시해보면,, 

- 1시간을 초로 환산하면 1 X 60 X 60 = 3600초

- 1분을 초로 환산하면 60초 이기 때문에 이걸 응용해서 문제를 해결하면 될거같습니다.

 

우선 입력을 받기위해 scanf 로 입력을 받겠습니다

입력을 받아야할것은 총 두개로 시간 , 분 , 초 엔터(개행) 후에 요리시간에 걸리는 초입니다.

변수는 보기쉽게 hour , min , sec , time 으로 하였습니다.

#include <stdio.h>

int main(){
    int hour,min,sec; // 시간 , 분 ,초 변수
    int time; // 걸리는 초 변수
    scanf("%d %d %d",&hour,&min,&sec); // 시간,분,초 입력 받기
    scanf("%d",&time); // //걸리는 초 입력받기
}

이제 입력을 받았으면 초(time 변수) 를 시간, 분, 초로 변환해

각각 시간(hour 변수)  분(min 변수)  초(sec변수) 에 더해주도록 하겠습니다.

 

    hour = hour + time/3600;
    min = min + time%3600/60;
    sec = sec + time%3600%60;

위에서 이야기 한것처럼 1시간은 3600 초 이므로 받아온초(time 변수) 에서 3600으로 나눈 몫이 시간이되겠죠?

잡설인데.. 2023년 정보처리기사 실기 2회차 문제에 동전 거스름돈 문제가 나왔었습니다,, %%% 십

 

다 더해주었다면 이제 각각 다음과정을 거쳐야합니다.

 

1. 초가 60이 넘는다면 0부터 다시 시작하고 분에 넘는시간만큼 더해주기

2. 분이 60이 넘는다면 0부터 다시 시작하고 시간에 넘는시간만큼 더해주기

3. 시간이 24가 넘는다면 0부터 다시 시작하게

 

왜냐하면 26시간 88분 67초라는 시간은 이세상엔 없기 때문입니다,,

실제로 위과정까지 더해주기만 하면 이런값들이 보여지겠죠?

if(sec>=60) { //초가 60을 넘기게되면
        min = min + sec /60 ; // 초에서 나눈 몫을 분에 더해줍니다.
        sec = sec %60 ; // 나머지값을 남기면됩니다.
    } 
    if(min>=60) {
        hour = hour + min/60 ; // 초 계산과 동일합니다.
        min  =  min%60 ;
    }
    if(hour>=24){ 
        hour = hour % 24;
        // 여기서 -24가 아닌 나머지 연산자로 %24를 해야합니다. 반례로 98을 생각해보세요 -24를 하면
        // 결과는 74가 될것입니다,,
    }
    
    // 여기서 중요한게 시간,분,초 순으로 조건문을 걸게되면 문제가 생길수도있습니다
    // 예를 들어 134 + 149 계산을할때 일의 자리부터 계산을 해서 10을 초과하는건
    // 다음자리로 넘겨주잖아요? 이거랑 동일하게 생각하시면 됩니다.

 

아래엔 풀코드입니다.

#include <stdio.h>

int main(){
    int hour,min,sec;
    int time;
    scanf("%d %d %d",&hour,&min,&sec);
    scanf("%d",&time);
    hour = hour + time/3600;
    min = min + time%3600/60;
    sec = sec + time%3600%60;
    if(sec>=60) {
        min = min + sec /60 ;
        sec = sec %60 ;
    }
    if(min>=60) {
        hour = hour + min/60 ;
        min  =  min%60 ;
    }
    if(hour>=24){
        hour = hour % 24;
    }
    printf("%d %d %d",hour,min,sec);
}

 

좀 중구난방이였는데 도움이 되셨을까요,,

+ Recent posts