백준 웹사이트 "2525번 - 오븐 시계" 문제풀이입니다.
언어는 C언어입니다. (제출 언어: C99)
문제
소스 코드
#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이하의 값이므로, 이틀 이상 날짜가 변할 위험은 없습니다.
반응형
'코딩 > 백준 BOJ' 카테고리의 다른 글
[백준/C언어] 15649번 - N과 M (1) (0) | 2022.02.22 |
---|---|
[백준/C언어] 2480번 - 주사위 세 개 (0) | 2022.02.21 |
[백준/C언어] 18870번 - 좌표 압축 (0) | 2022.02.19 |
[백준/C언어] 10814번 - 나이순 정렬 (0) | 2022.02.18 |
[백준/C언어] 1181번 - 단어 정렬 (0) | 2022.02.17 |