Problem
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일같은 날짜는 주어지지 않습니다)
Solution
문제분석
- 2016년 1월 1일 = 금요일
- 윤년 (2월 = 29일)
return 2016년 a월 b일의 요일
문제풀이
1. 각 요일과 월별 날짜를 변수로 저장한다. 1월 1일이 금요일(FRI)로 시작하므로 요일은 금요일을 맨앞에 넣는다
2. 1월 ~ a월의 전월일까지 월별 날짜 + b + % 7 - 1을 해준다.
-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로 return된다.
두번째
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'가 return되어야하므로 인덱스값인 6을 넣어줬다.
'프로그래머스 (JS) > Lv. 1' 카테고리의 다른 글
[Programmers / JS] 134240번 - 푸드 파이트 대회 (0) | 2023.03.21 |
---|---|
[Programmers / JS] 132267번 - 콜라 문제 (0) | 2023.03.21 |
[Programmers / JS] 147355번 - 크기가 작은 부분 문자열 (0) | 2023.03.20 |
[Programmers / JS] 81301번 - 숫자 문자열과 영단어 (0) | 2023.03.20 |
[Programmers / JS] 12915번 - 문자열 내 마음대로 정렬하기 (0) | 2023.03.20 |