백준 1308번 문제 바로가기

프로그래밍 언어를 배우고나면 한번쯤 만들어보는 dday 프로그램. python같은 경우엔 datetime 모듈을 import해서 금방 불러오겠지만, C++는 그런 모듈이 딱히 없어보여서 그냥 구현하기로 했다. 특정 날짜를 기준으로 잡고 차이를 여러개 구해서 빼주는게 비교적 간단하다.

#include <iostream>
#include <vector>

using namespace std;

int cal(int y, int m, int d) {
    vector<int> mth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int temp=0;
    if (!(y % 4) && y % 100 || !(y % 400)){
        mth[1]++;
    }
    for (int i=0; i<m-1; i++){
        temp += mth[i];
    }
    return (y-1)*365 + temp + (d-1) + ((y-1)/4 - (y-1)/100 + (y-1)/400);
}

int main() {
    int y1, m1, d1, y2, m2, d2, dday;
    cin >> y1 >> m1 >> d1 >> y2 >> m2 >> d2;
    dday = cal(y2, m2, d2) - cal(y1, m1, d1);
    if (y2 - y1 > 1000 || (y2 - y1 == 1000 && (m1 < m2 || (m1 == m2 && d1 <= d2)))){
        cout << "gg";
    } else{
        cout << "D-" << dday;
    }
}