스스로 요일을 구하는 공식을 세워서 풀면 될 것 같습니다.
2016년 a월 b일의 요일을 세우는 공식은?
먼저 요일은 7개밖에 없으니 2016년 1월 1일 금요일을 기준으로 아래와 같이 진행될 것입니다.
week = ['금요일', '토요일', '일요일', '월요일', '화요일', '수요일', '목요일']
그 이후로는 계속 반복됩니다.
그렇다면, 1월 1일로부터 며칠 지났는지 % 총 요일의 수
를 하면 될 것입니다.
1월 1일의 경우는 1월 1일로부터 0일 지났으므로
week[0]
는 '금요일'입니다.
1월 2일의 경우는 1월 1일로부터 1일 지났으므로
week[1]
는 '토요일'입니다.
이렇게 365일 전부의 요일의 수를 구할 수 있을 것입니다.
그렇다면, 며칠 지났는지는 어떻게 구하는가? 기본적으로 월, 일
로 날짜를 표현하기 때문에, 앞선 월들이 몇 일을 가지고 있는지 알아야 합니다.
1월부터 각 월이 갖고 있는 일의 숫자는 [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
입니다.
그렇다면 지난 월의 총 일수 + 일 - 1
로 며칠 지났는지를 구할 수 있습니다.
코드는 다음과 같이 나옵니다.
function solution(a, b) {
let daysOfEachMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
let dayNames = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
let sumOfDays = b;
for(let i=0; i<a-1; i++) {
sumOfDays += daysOfEachMonth[i];
}
return dayNames[(sumOfDays - 1) % dayNames.length];
}
사실 자바스크립트 내장 객체 중에 Date 객체가 있다. 이 객체를 사용하면 더욱 쉽게 풀 수 있습니다.
function getDayName(a,b){
var date = new Date(2016, (a-1), b);
return date.toString().slice(0, 3).toUpperCase();
}
console.log(getDayName(5,24));
위와 같이 Date 객체를 이용하면 즉각적으로 몇년 몇월 며칠이 어떤 요일인지 구할 수 있습니다. 단, toString()
메소드를 이용하여 답을 제출하는 것은 서버의 locale에 따라 정답과 오답이 결정되므로 ...
function getDayName(a,b){
var arr = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
var date = new Date(`2016-${a}-${b}`);
var day = date.getDay()
return arr[day];
}
console.log(getDayName(5,24));
위와 같은 형식으로 하는 것이 더 정확할 것입니다.