const DAYS = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
// 상수는 대문자로
const solution = (a, b) => {
const date = new Date(2016, a - 1, b);
return DAYS[date.getDay()];
};
당연히 이렇게 풀라고 낸 문제가 아니겠지
다른 사람의 풀이를 보니 역시 Date객체를 쓰지 않고도 풀 수 있는 문제였다.
윤년인 것을 감안하여 한 달이 몇일인지를 구성하면 되는 문제였다.
개선할 점을 고려하여 코드를 다시 구성해보면 아래와 같다.
const DAYS = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
const MONTHS = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// 상수는 대문자로
const reducer = (acc, current) => {
return acc + current;
};
const solution = (a, b) => {
let duration = MONTHS.filter((num, idx) => idx < a - 1).reduce(reducer, 0);
// reduce함수에 초기값을 지정해주지 않으면 MONTHS.filter()의 결과가 빈 배열일 때
// 에러가 발생하는 것 같다.
duration += b - 1;
// 1월 1일이라 1을 빼주어야 함
return DAYS[(5 + duration) % 7];
// 1월 1일이 금요일(인덱스 값=5)
};
function solution(a, b) {
const DAYS = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
const MONTHS = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
let duration = 0;
for (let i = 0; i < a - 1; i++) {
duration += MONTHS[i];
}
duration += b - 1;
return DAYS[duration % DAYS.length];
}