문제 개요
JavaScript에서 숫자 또는 문자열 형태의 연도를 입력받아, 해당 연도가 속한 세기를 계산해 반환하는 함수를 작성해야 합니다. 세기 계산은 단순히 연도를 100으로 나누는 것만으로는 부족하며, 2000년처럼 끝자리가 00인 해는 별도로 처리해야 한다는 점에 유의해야 합니다.
예를 들어 다음과 같습니다.
f("2000") = 20
f(1999) = 20
f("2002") = 212000년은 20세기의 마지막 해이므로 20세기에 속하고, 2001년부터는 21세기가 시작됩니다.
구현 코드
const centuryFromYear = year => {
if(typeof year == 'string'){
if(year.toString().slice(-2) == '00'){
return year.toString().slice(0,2);
}else{
return (Math.floor(+year/100) +1).toString();
};
}else if(typeof year == 'number'){
return Math.floor((year-1)/100) + 1;
}else{
return undefined;
};
};
console.log(centuryFromYear("2000"));
console.log(centuryFromYear("2002"));
console.log(centuryFromYear(1999));코드 설명
이 함수는 입력값의 타입에 따라 두 가지 방식으로 동작합니다.
- 문자열 입력인 경우: 먼저 연도의 마지막 두 자리가 '00'인지
slice(-2)로 확인합니다. '00'이라면 앞 두 자리가 곧 세기이므로slice(0, 2)로 추출해 그대로 반환합니다. 그렇지 않다면 연도를 숫자로 변환한 뒤 100으로 나누고 내림한 값에 1을 더해 반환합니다. - 숫자 입력인 경우:
(year - 1) / 100에 내림을 적용하고 1을 더하는 수식을 사용합니다. 이 공식은 2000년처럼 끝자리가 00인 해도 별도 조건 없이 자동으로 올바르게 처리할 수 있어 더욱 간결합니다.
두 타입 모두에 해당하지 않는 입력이 들어오면 undefined를 반환해 잘못된 입력을 안전하게 처리합니다.
참고: 사실 문자열 입력에도 Math.floor((year-1)/100) + 1 공식을 그대로 사용할 수 있습니다. 자바스크립트는 산술 연산 시 문자열을 자동으로 숫자로 변환하기 때문입니다. 이렇게 하면 코드를 훨씬 짧게 줄일 수 있습니다.간결한 버전
const centuryFromYear = year => Math.floor((year - 1) / 100) + 1;
위 한 줄짜리 함수는 문자열과 숫자 입력을 모두 지원하며, 모든 연도에 대해 정확한 세기를 반환합니다.
실행 결과
콘솔 출력 결과는 다음과 같습니다.
20
21
20