2022년 5월 8일에 작성됨
https://www.acmicpc.net/problem/2525
2525번: 오븐 시계
첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)
www.acmicpc.net
문제 분석
첫째 줄에는 시 A와 분 B를 입력하고 둘째 줄에는 더할 시간 C를 분 단위로 입력한다. 출력은 더한 시간을 시, 분 단위로 출력한다. 주의할 점은 23시 59분에서 1분이 지나면 0시 0분이 된다는 것이다.
코드-1 (❌)
#include <stdio.h>
int main(void)
{
int A, B, C;
scanf("%d %d", &A, &B);
scanf("%d", &c);
if((60 * A + B + C) >= 1440) {
A == 0 && B == 0;
printf("%d %d", C / 60, (60 * A + B + C) % 60);
}
else
printf("%d %d", (60 * A + B + C) / 60, (60 * A + B + C) % 60);
return 0;
}
<결과>
백준에서의 예제 입출력은 똑같이 되는데 답은 실패라고 떴다.
-> A와 B를 0시 0분으로 초기화 해주는 것을 0을 그대로 대입해버리면 남은 시간을 알 수 없으므로 방법이 잘못 되었다.
코드-2 (⭕)
#include <stdio.h>
int main(void)
{
int A, B, C;
scanf("%d %d", &A, &B);
scanf("%d", &C);
if ((60 * A + B + C) >= 1440) {
printf("%d %d", ((60 * A) + B + C - 1440) / 60, ((60 * A) + B + C - 60) % 60);
}
else
printf("%d %d", (60 * A + B + C) / 60, (60 * A + B + C) % 60);
return 0;
}
코드 분석
A, B, C를 분 단위로 바꾼 것의 합이 1440분(24시간) 이상이 될 때, 시간은 0시 0분으로 바뀌어서 남은 시간이 계산되므로 각각 시, 분 에다가 1440분과 60분을 빼주어서 0시 0분으로 초기화 시킨 다음, 남은 값을 60으로 나눈 몫과 나머지를 구해주면 된다.
1440분 미만이라면 따로 빼줄 필요 없이 계산 하면 된다.
end
질문이나 검색을 일절 하지않고 오로지 내 실력만으로 고민하면서 푼 문제라서 더욱 뿌듯한 것 같다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[C]백준_1110 : 더하기 사이클 (0) | 2023.04.17 |
---|---|
[C]백준_2741 : N 찍기 (0) | 2023.04.16 |
[C]백준_2884 : 알람 시계 (0) | 2023.04.14 |
[C]백준_2753 : 윤년 (0) | 2023.04.11 |
[C]백준_2480 : 주사위 세개 (0) | 2023.04.06 |