본문 바로가기

문제풀이

백준 2884번, 2525번 시간 계산의 알고리즘

#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;
}