연도가 Y라고 가정합니다. Y와 동일한 다음 연도를 찾습니다. 따라서 2017년의 달력은 2023년과 동일합니다.
이 두 조건이 일치하는 경우 X 연도는 이전 연도 Y와 동일합니다.
- x는 연도와 같은 날짜로 시작,
- y가 윤년이면 x도, y가 평년이면 x도 평년입니다.
아이디어는 내년부터 모든 연도를 하나씩 확인하는 것입니다. 앞으로 이동한 일 수를 추적할 것입니다. 이동한 날이 총 7일이면 현재 연도가 같은 날부터 시작됩니다. 또한 현재 연도가 윤년인지 확인하고, 그렇다면 y도 확인합니다. 두 조건이 모두 충족되면 현재 연도를 반환합니다.
예시
#include<iostream>
using namespace std;
int countExtraDays(int y) {
if (y%400==0 || y%100!=0 && y%4==0)
return 2;
return 1;
}
int nextIdenticalYear(int y) {
int days = countExtraDays(y);
int x = y + 1;
for (int sum=0; ; x++) {
sum = (sum + countExtraDays(x)) % 7;
if ( sum==0 && (countExtraDays(x) == days))
return x;
}
return x;
}
int main() {
int curr = 2019;
cout << "Next identical year of " << curr <<" is: " << nextIdenticalYear(curr);
} 출력
Next identical year of 2019 is: 2030