본문 바로가기

코딩/백준 BOJ

[백준/C언어] 2525번 - 오븐 시계

백준 웹사이트 "2525번 - 오븐 시계" 문제풀이입니다.

언어는 C언어입니다. (제출 언어: C99)

 


문제

 

2525번: 오븐 시계

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

www.acmicpc.net


소스 코드

#include <stdio.h>

int main(void){
    int A, B;
    scanf("%d %d", &A, &B);
    int C;
    scanf("%d", &C);

    if(B+C<60)
        printf("%d %d", A, B+C);
    else{   //B+C>=60
        int hour = (B+C)/60;
        int min = (B+C)%60;
        if(A+hour<24)
            printf("%d %d", A+hour, min);
        else    //A+hour>=24
            printf("%d %d", A+hour-24, min);
    }
}

문제 풀이

  경우들을 나누어 차근차근 풀어줍니다. 가장 간단한 경우부터 정리하고, 예외되는 경우들을 다시 세세하게 나누는 식으로 푸는 것이 편합니다.

 

1. 현재 분(B)과 필요한 분(C)의 합이 60보다 작은가? (Line 9, 11)

  만약 B+C가 60보다 작으면, 현재 시에는 변함이 없고 현재 분에 필요한 시간만 더하면 됩니다. 하지만 B+C가 60 이상이면, 현재 시에 변함이 생기면서 문제는 더 복잡해집니다. 60 이상일 경우에 한해, 아래 2번으로 넘어가줍니다.

 

2. 현재 시(A)와 필요한 시간((B+C)/60)의 합이 24보다 작은가? (Line 14, 16)

  B+C를 60으로 나누었을 때의 몫을 'hour', 나머지를 'min'에 저장합니다. 이 시점에서 B+C는 60 이상 1059 이하이므로, hour는 1 이상 17 이하의 값을 가지고 min는 0 이상 60 미만의 값을 가집니다. 만약 A와 hour의 합이 24보다 작으면 날짜에는 변동이 없기 때문에 A+hour을 그대로 사용합니다. 둘의 합이 24를 넘는다면, 날짜 변동을 감안하여 A+hour-24를 사용합니다. 이때 hour이 17이하의 값이므로, 이틀 이상 날짜가 변할 위험은 없습니다.

반응형