Notice
Recent Posts
Link
정화 코딩
[C++] D-Day (백준 1308번) 본문
https://www.acmicpc.net/problem/1308
#include <iostream>
using namespace std;
bool isleap(int n) {
if (n % 4 == 0) {
if (n % 100 == 0) {
if (n % 400 == 0) return true;
else return false;
}
return true;
}
return false;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int y1, y2, m1, m2, d1, d2;
cin >> y1 >> m1 >> d1 >> y2 >> m2 >> d2;
int y3 = y2 - y1;
if ((y3 > 1000) || (y3 == 1000 && m2 >= m1 && d2 >= d1)) {
cout << "gg\n";
} else {
int ans = 0;
if (y3 == 0) {
while (m1 < m2) {
if (m1 == 2 && isleap(y1)) ans += 29;
else ans += month[m1];
m1++;
}
ans += (d2 - d1);
} else {
while (m1 < 12) {
if (m1 == 2 && isleap(y1)) ans += 29;
else ans += month[m1];
m1++;
}
ans += (month[m1] - d1 + 1);
y1++;
m1 = 1;
d1 = 1;
while (y1 < y2) {
if (isleap(y1)) ans += 366;
else ans += 365;
y1++;
}
while (m1 < m2) {
if (m1 == 2 && isleap(y1)) ans += 29;
else ans += month[m1];
m1++;
}
ans += (d2 - d1);
}
cout << "D-" << ans << '\n';
}
}
좀 비효율적으로 짜긴 했는데;;
이 문제에서 헷갈릴만한 건, 천년 이상이라는 게 연도의 차이는 1000 이상이면서 달도 크거나 같고 일도 크거나 같아야 한다는 것이다. 즉, <2000년 1월 1일, 3000년 1월 1일>은 gg가 맞지만, <2000년 1월 2일, 3000년 1월 1일>은 gg가 아니라 계산을 해주어야 한다는 뜻이다. (AC)
'PS' 카테고리의 다른 글
[C++] 이동하기 (백준 11048번) (0) | 2025.01.05 |
---|---|
[C++] 수위 아저씨의 고민 (백준 9048번) (0) | 2025.01.03 |
[C++] 문자열 폭발 (백준 9935번) (1) | 2024.12.21 |
[C++] 이진 검색 트리 (백준 5639번) (0) | 2024.12.21 |
[C++] 팰린드롬 (백준 10174번) (0) | 2024.12.13 |
Comments