알고리즘

[C++] 백준 2139번 나는 너가 살아온 날을 알고 있다

J3SUNG 2019. 8. 25. 04:18
728x90

xxxx년 1월 1일 ~ xxxx년 yy월 zz일의 총 일 수를 구하는 문제입니다.

고려해야하는 사항은 윤년입니다.
윤년은 4로 나누어 떨어지며 100으로 나누어 떨어지면 안되지만
400으로 나누어떨어지면 괜찮습니다.
이를 코드로 나타내면 다음과 같습니다.

if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))

윤년일 경우 3월이 넘는 달을 입력하면 +1을 해줍니다.

month의 경우 12개의 배열을 만들어 yy달이 될때까지 배열의 값을 총 일수에 더해줍니다.

int mArr[12] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };

for(int i=0; i<month; ++i){
	totalDay += mArr[i];
}

그리고 일수는 그대로 총 일 수에 더해줍니다.

#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
	int day, month, year;
	int specialYear;
	int totalDay;
	int mArr[12] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };

	while (1) {
		cin >> day;
		cin >> month;
		cin >> year;

		if (day == 0 && month == 0 && year == 0) {
			break;
		}

		specialYear = 0;
		if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
			specialYear = 1;
		}

		totalDay = 0;
		if (specialYear == 1 && month > 2) {
			++totalDay;
		}

		for(int i=0; i<month; ++i){
			totalDay += mArr[i];
		}
		
		totalDay += day;

		cout << totalDay << endl;
	}
	return 0;
}