Doby's Lab

[알고리즘] 백준 23628번 : 악마의 연차 계산기 (C++) 본문

PS/BOJ

[알고리즘] 백준 23628번 : 악마의 연차 계산기 (C++)

도비(Doby) 2021. 11. 22. 07:57

https://www.acmicpc.net/problem/23628

 

23628번: 악마의 연차 계산기

360일 일하면, 휴가를 받아야 함이 마땅하다. 그에 따라, 우리 회사도 연차와 월차를 주고자 한다. 연차와 월차는 사용하면 하루 쉴 수 있는 것이다. 그런데, 인력이 너무 부족한 탓에 그만…. 지

www.acmicpc.net

 

처음엔 많은 조건 분기로 풀었으나 이는 너무 복잡한 코드였다.

#include <iostream>
using namespace std;

int main() {
	int y, m, d;
	int dy, dm, dd;

	cin >> y >> m >> d;
	cin >> dy >> dm >> dd;

	int year = 0;
	int month = 0;
	int days = 0;
	if (dy == y) {
		if (dm == m) {
			year = 0;
			month = 0;
			days = dd - d;
		}
		else if (dm > m) {
			year = 0;
			if (dd >= d) {
				month = dm - m;
				days = (dm - m) * 30 + dd - d;
			}
			else {
				month = dm - m - 1;
				days = (dm - m - 1) * 30 + 30 - d + dd;
			}
		}
	}
	else if (dy > y) {
		if (dm == m) {
			if (dd >= d) {
				month = (dy - y) * 12;
				days = month * 30 + dd - d;
			}
			else if (dd < d) {
				month = (dy - y) * 12 - 1;
				days = month * 30 + 30 - d + dd;
			}
		}
		else if (dm > m) {
			if (dd >= d) {
				month = (dy - y) * 12 + (dm - m);
				days = month * 30 + dd - d;
			}
			else if (dd < d) {
				month = (dy - y) * 12 + (dm - m) - 1;
				days = month * 30 + 30 - d + dd;
			}
		}
		else if (dm < m) {
			if (dd >= d) {
				month = (dy - y - 1) * 12 + 12 - m + dm;
				days = month * 30 + dd - d;
			}
			else if (dd < d) {
				month = (dy - y - 1) * 12 + 12 - m + dm - 1;
				days = month * 30 + 30 - d + dd;
			}
		}
	}

	int yearCnt = month / 12;
	year += 15 * yearCnt;

	for (int i = 1; i <= yearCnt; i++) {
		year += (i - 1) / 2;
	}
	if (month >= 36) {
		month = 36;
	}



	cout << year << ' ' << month << '\n';
	cout << days << "days";
	return 0;
}

[AC 코드]

단순히 입력받은 날 2개를 다 날짜로 바꿔서 비교하면 간단하게 풀리는 문제다.

#include <iostream>
using namespace std;

int main() {
	int y, m, d;
	int dy, dm, dd;
	cin >> y >> m >> d;
	cin >> dy >> dm >> dd;

	int day1 = 360 * (y - 1) + 30 * (m - 1) + d;
	int day2 = 360 * (dy - 1) + 30 * (dm - 1) + dd;

	int days = day2 - day1;
	int month = days / 30;
	int yearCnt = month / 12;
	int year = 0;
	year += 15 * yearCnt;

	for (int i = 1; i <= yearCnt; i++) {
		year += (i - 1) / 2;
	}

	if (month >= 36) {
		month = 36;
	}

	cout << year << ' ' << month << '\n';
	cout << days << "days";
	return 0;
}
728x90