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일같은 날짜는 주어지지 않습니다)
a | b | return |
---|---|---|
5 | 24 | "TUE" |
1월 1일이 금요일이므로 금요일부터 일주일을 배열에 넣는다.
2016년의 매달 마다 몇 일이 있는지 배열에 입력해 놓는다.
몇 월 며칠인지 입력받는다.
입력받은 달 이전 달들의 일 수를 더한다.
앞에서 더한 일수에 입력받은 일 수만큼 더한다.(1년 중 총 몇 일이 지났는지)
더한 수에 7을 나눠서 일 주일 중 몇 번째인지 구한다.(배열에서 값을 가져올 땐 0부터 가져오니 -1을 해준다.)
만약 위에서 7일 나눴을 때 나누어 떨어진다면 값이 -1이 돼버리지만, 7번째 요일이므로 6을 입력해준다.
일 주일(배열) 중 몇 번째 요일인지 출력한다.
function solution(a, b) {
let weeks = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
let arr = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
let monthDays = 0;
let day;
for (let j = 0; j < a - 1; j++) {
monthDays = monthDays + arr[j];
}
day = ((monthDays + b) % 7) - 1;
if (day == -1) {
day = 6;
}
return weeks[day];
}
function getDayName(a, b) {
var date = new Date(2016, a - 1, b);
return date.toString().slice(0, 3).toUpperCase();
}
function solution2(a, b) {
const day = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
return day[new Date(`2016/${a}/${b}`).getDay()];
}
Date라는 객체 생성자를 이용하여 굉장히 간단하게 구하였다.
깔끔하지만, 문제 해결능력을 키우기 위해서는 Date를 쓰지 않는 것이 좋을 것 같다.