알고리즘
[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;
}