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일같은 날짜는 주어지지 않습니다)
윤년이 2월이 29일이 되어야 하는 점을 뒤늦게 깨닫고 수정했다.
function solution(a, b) {
var answer = '';
const week=['FRI','SAT','SUN','MON','TUE','WED','THU']
const day=[31,28,31,30,31,30,31,31,30,31,30,31]
let monthcal = day.slice(0,a-1).reduce((a,b)=>a+b,0)+b
const daycal=(monthcal%7)
return week[daycal]
return answer;
}
인덱스에 들어갈 날짜 계산을 할당한 변수 daycal에다가 계산을 해서 틀렸다.
날짜 인덱스를 수정하면 아무래도 7로 나누는 것에 들어가지 않아 오류를 일으킬 것이다.
계산을 monthcal에 더해주어야 했다.
function solution(a, b) {
var answer = '';
const week=['FRI','SAT','SUN','MON','TUE','WED','THU']
const day=[31,29,31,30,31,30,31,31,30,31,30,31]
let monthcal = day.slice(0,a-1).reduce((a,b)=>a+b,0)+b
const daycal=(monthcal%7)-1
return week[daycal]
return answer;
}
function solution(a, b) {
var answer = '';
const week=['FRI','SAT','SUN','MON','TUE','WED','THU']
const day=[31,29,31,30,31,30,31,31,30,31,30,31]
let monthcal = day.slice(0,a-1).reduce((a,b)=>a+b,0)+b-1
const daycal=(monthcal%7)
return week[daycal]
return answer;
}
function solution(a, b) {
return new Date(2016, a-1, b).toString().slice(0,3).toUpperCase();
}
date 메서드를 이용한 경우도 있다. 간단하지만 연산해보는 과정도 좋은 것같다.
function solution(a, b) {
const monthDay = [31,29,31,30,31,30,31,31,30,31,30,31]
const weekDay = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]
let days = b
for(let i=0 ; i<a-1 ; i++)
days += monthDay[i];
return weekDay[days%7];
}
for문을 이용하는 경우는 이렇다. 하지만 연산의 경우 reduce가 더 편할 거같다.
또한 이 경우는 answer을 없애도 무방한 것같다.
function solution(a, b) {
const week=['FRI','SAT','SUN','MON','TUE','WED','THU']
const day=[31,29,31,30,31,30,31,31,30,31,30,31]
let monthcal = day.slice(0,a-1).reduce((a,b)=>a+b,0)+b-1
const daycal=(monthcal%7)
return week[daycal]
}