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"를 반환하세요.
2가지 답을 제출하였는데
첫번째 방법으로는 javascript의 Date객체를 사용하였고 (내고나서 나랑 같은 답안이 있길래 댓글을 보았는데 알고리즘에 누가 내장객체를 사용하냐고 뭐라하는 것을 보았다... 사용하지 않는 것이 좋을듯🙄)
두번째 방법은 알고리즘적(?)으로 풀었다.
1월 1일 ~ a월 b일까지의 차이를 7로 나누고 나머지를 요일로 계산하는 방식을 생각했다.
우선, 요일 String을 반환하는 array와 매달의 날짜를 반환하는 array(dayStr)를 생성하였다.
(1월 1일이 "FRI" 로 시작하므로 요일 array를 "FRI" 부터 시작하도록 생성했다.)
1일부터 b일간 날짜차이는 b-1일이므로 daySum=b-1; 로 시작변수를 생성하고
1월 ~ a월까지의 달에 해당되는 day의 합은 for문을 사용하였다.
마지막에 daySum을 7로 나눈 후 나머지에 해당하는 숫자를 dayStr배열에서 찾으면 요일을 찾을 수 있다.
// 1. Date 객체 사용
function solution(a, b) {
const dayStr = ["SUN","MON","TUE","WED","THU","FRI","SAT"];
return dayStr[new Date('2016', a-1, b).getDay()];
}
// 2. 날짜 계산 방법
function solution(a, b) {
let dayStr = ["FRI","SAT","SUN","MON","TUE","WED","THU"];
let dayOfMonth = [31,29,31,30,31,30,31,31,30,31,30,31];
let daySum = b-1;
for(let i=1; i<a; i++) {
daySum += dayOfMonth[i-1];
}
return dayStr[daySum%7];
}![](https://velog.velcdn.com/images%2Fyeoj1n%2Fpost%2F3c263011-d1da-4e32-b4a9-7389d0f050a7%2Fimage.png)