이번 글에서는 양의 정수 n을 입력받아 앞으로 다가올 윤년 n개를 배열로 반환하는 함수를 작성해 보겠습니다. 이 문제는 크게 세 단계로 나누어 해결할 수 있습니다.
1단계: JavaScript로 현재 연도 구하기
먼저 Date 객체의 새 인스턴스를 생성하여 현재 연도를 구합니다.
// Date 객체의 새 인스턴스에서 현재 연도 가져오기 const year = new Date().getFullYear();
2단계: 윤년 여부 확인하기
다음으로 숫자를 입력받아 해당 연도가 윤년인지 아닌지에 따라 불리언 값을 반환하는 isLeap() 함수를 작성합니다.
윤년은 다음 두 조건 중 하나 이상을 만족하는 해입니다.
- 400의 배수인 경우
- 4의 배수이면서 100의 배수는 아닌 경우
이 조건들을 바탕으로 isLeap() 함수를 작성하면 다음과 같습니다.
// 윤년 여부를 확인하는 함수
const isLeap = year => {
return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);
};3단계: 앞으로 올 윤년 n개 찾기
이제 현재 연도부터 시작해 윤년을 순차적으로 검사하고, 원하는 개수만큼 배열에 담는 nextNLeap() 함수를 완성할 수 있습니다.
예제 코드
// 윤년 여부를 확인하는 함수
const isLeap = year => {
return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);
};
const nextNLeap = n => {
const arr = [];
let year = new Date().getFullYear()+1;
while(arr.length < n){
if(isLeap(year++)){
arr.push(year-1);
};
};
return arr;
};
console.log(nextNLeap(5));
console.log(nextNLeap(25));출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[ 2024, 2028, 2032, 2036, 2040 ]
[
2024, 2028, 2032, 2036, 2040,
2044, 2048, 2052, 2056, 2060,
2064, 2068, 2072, 2076, 2080,
2084, 2088, 2092, 2096, 2104,
2108, 2112, 2116, 2120, 2124
]출력 결과에서 흥미로운 점은 2096년 다음 윤년이 2104년이라는 것입니다. 2100년은 4의 배수이지만 100의 배수이면서 400의 배수가 아니므로 윤년에서 제외됩니다.这正是 isLeap() 함수의 두 가지 조건이 정확하게 작동하는 결과입니다.