문제 - Codewars_Century From Year (8kyu)
Introduction The first century spans from the year 1 up to and including the year 100, the second century - from the year 101 up to and including the year 200, etc. Task Given a year, return the century it is in. Examples 1705 --> 18 1900 --> 19 1601 --> 17 2000 --> 20
문제 풀이
function century(year) {
let yearString = String(year);
let endNum = yearString.slice(-2,);
let startNum = yearString.slice(0,-2);
if(endNum === "00"){
return Number(startNum);
}else{
return Number(startNum) + 1;
}
}
숫자를 문자열로 바꿔서 끝자리가 00으로 끝나면 앞에 두 숫자를 반환하고 아닐 시 앞에 두 숫자에 + 1인 숫자를 반환하는 방법으로 풀어야겠다고 생각했다.
따라서 숫자를 쪼개서 if 구문에서 조건문을 작성해야겠다 생각해서 숫자를 문자열으로 바꾸는 변수 선언 후
끝에서 두 자리 문자열부터 마지막 문자열까지 확인해줄 수 있도록 (-2,)로 slice 인덱스 지정(slice 메소드는 마지막 인덱스를 지정하지 않으면 마지막 글자까지 확인해줌)
년도가 4자리가 아닐 수 있기 때문에 첫 번째 글자부터 끝에서 두 번째 문자열을 확인해줄 수 있도록 (0,-2)로 slice 인덱스를 지정했다.
이후 if 구문을 사용해서 만약 끝 두 문자열이 "00"이라면, 현재는 문자열인 startNum을 숫자로 변환한 수를 반환하고, 아닐 시 startNum에서 + 1 된 수를 반환하는 코드를 작성했다.
코드 비교
const century = year => Math.ceil(year/100)
년도를 100으로 나누고 소숫점 이하의 숫자는 반올림하는 Math.ceil() 메소드를 사용했다. 굿! 예) 202345년의 세기는 => 202345/100 = 2023.45 => 2024세기
function century(year) {
if (year <= 100){
return 1;
}
let cen = parseInt(year / 100);
let rem = year % 100;
return rem === 0 ? cen : cen + 1;
}
맨 처음 if 구문을 사용해서 100보다 작은 년도들은 1을 반환하는 코드를 작성했다.
cen 변수를 통해 year을 100으로 나눈 후 정수로 변환한 값을 반환하는 코드 작성 예) year이 2023이면 2023 / 100 = 20.23 이고, 이후 parseInt 함수를 통해 정수를 반환하므로 cen의 반환값은 20
rem 변수를 통해 year을 100으로 나눴을 때 나머지 값 반환하는 코드 작성 예) year이 2023이면 2023을 / 100 = 20.23이고, 나머지 값을 반환하므로 rem의 반환값은 23
이후 rem 값이 0이면 cen을 반환하고, 아니라면 cen에 + 1 값을 반환하는 코드 작성