문제
1월 1일이 금요일일 때 a월 b일의 요일을 구하여라
풀이
function solution(a, b) {
const daysInMonth = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
const totalDays = daysInMonth.slice(0, a).reduce((acc, cur) => acc + cur, 0) + b - 1;
const dayOfWeek = totalDays % 7;
const days = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
return days[dayOfWeek];
}
- dayInMonth : 각 월의 일 수를 배열로 저장
- totalDays : 1월 1일이 금요일이므로 해당 날짜까지 총 일 수 계산
- slice 입력된 월 (a)까지의 일 수를 추출하고 reduce를 이용해 합산
- -1을 더하는 이유는 날짜를 0부터 시작하고 주어질 날짜에서 1을 빼서 총 일 수 계산
- dayOfWeek : 7로 나누어 나머지를 구하여 요일 결정
- days : 요일에 해당하는 문자열 반환
다른 풀이
function getDayName(a, b) {
var tempDate = new Date(2016, a - 1, b);
return tempDate.toString().slice(0, 3).toUpperCase();
}
- Date를 사용할 생각조차 못한.. 해답
- Date 객체를 문자열로 변환 후 앞 3글자 추출하고 대문자로 변환하여 요일 얻기
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];
}