백준 2884번 : 알람 시계 문제 풀이
https://www.acmicpc.net/problem/2884
1. 문제
2. 풀이
이번 문제는 순차적으로 생각하면 쉽게 풀 수 있다
시간( h )과 분( m )을 입력받고 45분을 빼면 되는 문제이다
#include <stdio.h>
int main() {
int h, m;
scanf("%d %d", &h, &m);
scanf 를 이용하여 시간( h ) 과 분 ( m ) 을 입력받는다
시간( h )이 0보다 클 때와 같을 때를 기준으로 잡고
세부적으로 분 ( m )이 45보다 클 때와 작을 때를 기준으로 나누었다
if (h >= 0) {
if (m >= 45) {
m -= 45;
}
if 문을 사용해서 시간 ( h )이 0보다 클 때와 같을 때
분 ( m )이 45 보다 크거나 같으면 45를 빼도록 했다
else if (m < 45 && h != 0) {
h -= 1;
m += 15;
}
else if 문을 사용해서 if 문과 구별을 해주었다
분 ( m )이 45보다 작을 때는
시간 ( h )에서 1을 빼고
분 ( m )에 15를 더하도록 했다
하지만 위의 조건문 ( h >= 0 ) 에 걸리게 되어
h 가 0일 때도 1 을 빼는 오류가 발생하였다
그래서 조건으로 h 가 0이 아닐 때를 추가했다
else if (h == 0) {
h = 23;
m += 15;
}
}
마지막으로 시간 ( h )이 0일 때는
시간 ( h )을 23으로 바꾸고
분 ( m )에 15를 더하도록 했다
최종적으로 제출한 코드이다
#include <stdio.h>
int main() {
int h, m;
scanf("%d %d", &h, &m);
if (h >= 0) {
if (m >= 45) {
m -= 45;
}
else if (m < 45 && h != 0) {
h -= 1;
m += 15;
}
else if (h == 0) {
h = 23;
m += 15;
}
}
printf("%d %d", h, m);
return 0;
}
3. 다른 사람이 제출한 코드
#include <stdio.h>
int main(void){
int H, M;
scanf("%d %d", &H, &M);
if(M>=45)
printf("%d %d", H, M-45);
else if(H>0)
printf("%d %d", H-1, 60-(45-M));
else
printf("23 %d", 60-(45-M));
}
1) H 가 0인 경우
M 이 45보다 크면 : M - 45 를 한다
M 이 45보다 작으면 : H를 23으로 바꾸고 60 - (45 - M)를 한다
2) H 가 0이 아닌 경우
M 이 45보다 크면 : M - 45 를 한다
M 이 45보다 작으면 : H - 1을 하고 60 - (45 - M)를 한다
ex) M = 5 라고 하면
60 - (45 - 5) = 20
다른 사람의 코드를 분석해보니
아직 부족하다는 것을 많이 느낀다
'Coding > baekjoon' 카테고리의 다른 글
[백준 / baekjoon] 2480번 : 주사위 세개 [C] (0) | 2023.11.22 |
---|---|
[백준 / baekjoon] 2525번 : 오븐 시계 [C] (0) | 2023.11.21 |
[beakjoon] 14681번 : 사분면 고르기 [C] (0) | 2023.11.19 |
[baekjoon] 2753번 : 윤년 [C] (0) | 2023.11.16 |
[baekjoon] 9498번 : 시험 성적 [C] (0) | 2023.11.16 |