#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void TimeDiscount(int h, int m) {
int total_m = h * 60 + m;
total_m -= 45;
if (total_m < 0)
total_m += 24 * 60;
printf("%d %d", total_m / 60, total_m % 60);
}
int TimeVer(int x, int y) {
if ((x < 0 || x >= 24) || (y < 0 || y >= 60)) {
printf("잘못된 입력입니다");
return 1;
}
return 0;
}
int main() {
int x, y, total_m;
scanf("%d %d", &x, &y);
if (TimeVer(x, y))
return;
TimeDiscount(x, y);
return 0;
}
백준 2884번의 시간계산 알고리즘 입니다.
처음 생각해 낸건 분에서 45를 빼고, 0보다 작을 경우 시간에서 1을 빼는 형태 였으나, 재사용성이 떨어지는 코드라고 판단해서 위처럼 수정 했습니다.
전체 분에서 60으로 나눈 몫이 시간이 되고 60으로 나눈 나머지가 결국 분이 되는 형태이기 때문에 분으로 계산하고 출력 할 때 나눗셈을 해준다면 효율적인 시간 계산 알고리즘이 됩니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int TimeVer(int h, int m, int cookm) { // 입력된 시간들의 유효성 검사
if (h < 0 || h>23 || m < 0 || m >59 || cookm < 0 || cookm > 1000) {
printf("잘못된 시간 입력입니다.");
return 1;
}
return 0;
}
void TimeCalc(int h, int m, int cookm) { //주어진 시간과 분들의 총합
int total_m = h * 60 + m + cookm;
if (total_m >= 60 * 24)
total_m = (60 * 24 - total_m) * -1;
printf("%d %d", total_m / 60, total_m % 60);
}
int main() {
int h, m, cookm;
scanf("%d %d", &h, &m);
scanf("%d", &cookm);
if (TimeVer(h, m, cookm))
return;
TimeCalc(h, m, cookm);
return 0;
}
'문제풀이' 카테고리의 다른 글
초보자를 위한 C++ 200제 42번 문제 해석 피라미드 출력 (0) | 2023.07.04 |
---|---|
2차원 배열 도전 실전 예제 (0) | 2023.04.25 |
혼자 공부하는 C언어 도전 실전 예제 풀어 보기 (315p) (0) | 2023.04.19 |
백준 25304번 반복문 기초문제 영수증 (0) | 2023.04.14 |
백준 2480번 서로다른 3개의 수의 크기 비교 하기 (0) | 2023.04.11 |