2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요?
두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요.
요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT
입니다.
예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.
제한사항
- 2016년은 윤년입니다.
- 2016년 a월 b일은 실제로 있는 날입니다.
(13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
function solution(month, date) {
const days = ["SAT", "SUN", "MON", "TUE", "WED", "THU", "FRI"];
const time = new Date(2016, month - 1, date + 1);
const day = time.getDay();
return days[day];
}
윤년은 2월이 29일까지 있기 때문에 1년 총 일수가 365일이 아닌 366일인 해입니다.
따라서 먼저 Date
객체를 통해 날짜를 생성한 뒤 time
변수에 할당합니다.
이후 getDay
메소드를 통해 해당 날짜의 요일을 받아옵니다.
반환값은 0~6이며 이는 원래 SUN~SAT를 뜻합니다.
하지만 2016년은 윤년이라 전체 일수가 하루 더 많기 때문에 days
를 SUN이 아닌 SAT부터 시작되도록 해주면 통과할 수 있습니다.
function solution(a, b) {
const date = new Date(`2016-${a}-${b}`).toString();
return date.slice(0, 3).toUpperCase();
}
Date로 받은 날짜를 toString
메소드를 사용해 문자열로 변경하게 되면 맨 앞쪽에 3자리 형태로 이루어진 요일이 붙게 되는데 이를 slice(0, 3)
으로 요일에 대한 문자열만 가져옵니다.
Fri
와 같이 첫 글자만 대문자 형태의 문자열이기 때문에 toUpperCase
메소드를 사용해줍니다.
만약 new Date
의 인자를 문자열로 넣지 않을경우 new Date(2016, a - 1, b)
로 입력해주어야 합니다.
이유는 Date
객체에서 월을 숫자로 받을 때는 배열의 인덱스처럼 0부터 세기 때문입니다.