백준 2884번 문제
https://www.acmicpc.net/problem/2884
1. 문제
상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.
상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.
이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다.
바로 "45분 일찍 알람 설정하기"이다.
이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.
현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.
2. 내가 작성한 알고리즘
#include <stdio.h>
int main()
{
int H,M;
int TIME;
scanf("%d %d",&H ,&M);
if (H==0 and M>=45){
M=M-45;
}
else{
if(H==0) H=24;
H=60*H;
TIME= H+M-45;
H=TIME/60;
M=TIME%60;
}
printf("%d %d",H,M);
return 0;
}
3. 완벽하게 작성한 알고리즘
#include <stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
a--;
b+=15;
if (b>=60) {
a++;
b%=60;
}
if (a<0) a+=24;
printf("%d %d",a,b);
return 0;
}
4. 이번 알고리즘을 통해 배운 점
이번 문제는 주어진 시간에 -45분을 해야 문제를 풀어나갈 수 있다. 첨에는 시간을 분으로 바꾸고 분을 더한 값을 이용하여 문제를 풀었지만 이렇게 되면 시간이 0일때의 문제와 시간이 0일때 45분 이상일 때 문제가 발생하여 더 긴 코드를 요구하게 된다. koosaga 님의 코드를 보면서 -45분의 요구사항을 증가,감소 연산자와 +15분을 활용하여 풀어나가는 알고리즘을 해석해 나아가면서 많은 도움이 됐다.
내가 아는 공식을 최대한 사용하여 알고리즘을 푸는 것이 아닌 어떻게 하면 효율적으로 알고리즘을 풀어나갈 수 있는지
에 대해 고심해야 되겠다.
알고리즘을 혼자 고심해서 푼 뒤 다른 사람의 알고리즘을 꼭 봐야 알고리즘을 풀어나가는 폭이 넓어질 것 같다.
'C > 백준 알고리즘 (c언어)' 카테고리의 다른 글
1차원 배열 practice 02_최댓값 구하기 (0) | 2021.06.29 |
---|---|
1차원배열 practice 01_평균은 넘겠지 (0) | 2021.06.29 |
for문 practice 02_ A+B-4 (0) | 2021.06.28 |
while문 practice 01_더하기 싸이클 (0) | 2021.06.28 |
for문 practice 01_x보다 작은수 (0) | 2021.06.26 |