연도가 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