문제
2016년 1월 1일은 금요일입니다.
a/b/2016은 무슨 요일입니까? 두 개의 숫자 a와 b를 취하고 2016년 b월의 요일을 반환하는 함수인 해를 완성하십시오. 요일의 이름은 일요일부터 토요일까지 각각 SUN, MON, TUE, WED, THU, FRI 및 SAT입니다.
보지마. 예: a=5, b=24는 5월 24일이 화요일이므로 문자열 “TUE”를 반환합니다.
제한
– 2016년은 윤년입니다.
– 2016 a/b는 실제 날짜입니다.
(26.13. 또는 45.02.와 같은 날짜는 제공되지 않음)
해결책
문제 분석
– 2016년 1월 1일 = 금요일
– 윤년(2월 = 29일)
a/b/2016의 요일을 반환합니다.문제를 해결하다
1. 각 요일과 월의 날짜를 변수로 저장합니다.
1월 1일은 금요일(FR)에 시작하므로 요일은 금요일보다 먼저 설정됩니다.
2nd month date + b + % 7 – 1 1월부터 다음달 a까지.
-1인 이유는 배열의 첫 번째 인덱스가 0이기 때문입니다.
첫 번째
function solution(a, b) {
let mon = ('FRI','SAT','SUN','MON','TUE','WED','THU');
let day = (31,29,31,30,31,30,31,31,30,31,30,31);
let dd = day.slice(0, a - 1).reduce((a, b) => a + b) + b;
return mon(dd % 7 - 1);
}
테스트 1, 2, 9, 13은 오류를 반환했습니다.
특히 1번과 2번은 런타임 에러가 나서 코드를 다시 살펴봤습니다.
a가 1월이면 dat.slice(0, 0)는 ( ) 빈 배열이 됩니다.
또한 dd를 7로 나누었을 때 0이면 mon(-1)이 되어 undefined를 반환한다.
두번째
function solution(a, b) {
let mon = ('FRI','SAT','SUN','MON','TUE','WED','THU');
let day = (31,29,31,30,31,30,31,31,30,31,30,31);
let dd = 0;
if(a === 1) return mon(b % 7 - 1);
else dd = day.slice(0, a - 1).reduce((x, y) => x + y) + b;
return mon(dd % 7 === 0 ? 6 : dd % 7 - 1);
}
1월 때를 고려해서 if 문을 넣었는데 dd를 7로 나누면 0이면 ‘THU’가 반환되어야 하므로 인덱스 값 6을 넣었습니다.