C++/C++ 문제
[C++] 백준 1308번: D-Day
renne
2022. 8. 5. 19:00
https://www.acmicpc.net/problem/1308
1308번: D-Day
첫째 줄에 오늘의 날짜가 주어지고, 두 번째 줄에 D-Day인 날의 날짜가 주어진다. 날짜는 연도, 월, 일순으로 주어지며, 공백으로 구분한다. 입력 범위는 1년 1월 1일부터 9999년 12월 31일 까지 이다.
www.acmicpc.net
#include <iostream>
using namespace std;
int month[13] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int leapyear(int);
int days(int, int);
int main() {
int y1, m1, d1, y2, m2, d2, result;
cin >> y1 >> m1 >> d1 >> y2 >> m2 >> d2;
//캠프가 1000년 이상일 경우 "gg" 출력
if ((y2 - y1) == 1000) {
if (m2 > m1){
cout << "gg";
return 0;
}
if (m2 == m1) {
if (d2 >= d1) {
cout << "gg";
return 0;
}
}
}
else if ((y2 - y1) > 1000) {
cout << "gg";
return 0;
}
//디데이 구하기
result = (days(y2, m2) + d2) - (days(y1, m1) + d1);
cout << "D-" << result;
}
//윤년인지 아닌지
int leapyear(int year) {
int judge = 0;
if (year % 4 == 0) {
judge = 1;
if (year % 100 == 0) judge = 0;
if (year % 400 == 0) judge = 1;
}
return judge;
}
//1년 1월 1일 부터 y년 m-1월 말일까지의 days 구하기
int days(int y, int m) {
int count = 0;
for (int i = 1; i <= y; i++) {
//y년 m-1월 말일까지 구하는 이유: d는 따로 더함
for (int j = 0; j < (i == y ? m - 1 : 12); j++) {
count += month[j];
}
//윤년은 366일
if (leapyear(i)) count++;
}
//예를 들어 2020년 2월 20일인 경우, 2월 29일이 넘지 않으므로 -1
if (leapyear(y) == 1 && m < 3) --count;
return count;
}