코딩테스트 42일차
2016년
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"를 반환하세요
function solution(a, b) {
const days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
const monthDays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
let totalDays = b - 1; // 해당 월의 이전 날짜 수를 더하기 위해 b에서 1을 뺍니다.
for (let i = 0; i < a - 1; i++) {
totalDays += monthDays[i]; // 해당 월의 이전 월들의 일 수를 더합니다.
}
return days[(totalDays + 5) % 7]; // 2016년 1월 1일이 금요일이므로, 5를 더한 후 7로 나눈 나머지로 요일을 구합니다.
}
✏️풀이
const days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];: days 배열에는 일주일의 요일을 문자열로 저장합니다. 인덱스 0부터 일요일(SUN), 1부터 월요일(MON), ..., 6부터 토요일(SAT)에 해당합니다.
const monthDays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];: monthDays 배열에는 각 월의 일 수를 저장합니다. 1월부터 12월까지 순서대로 일 수가 저장되어 있습니다. 2016년은 윤년이므로 2월은 29일로 설정됩니다.
let totalDays = b - 1;: totalDays 변수에는 해당 날짜까지의 총 일 수를 저장합니다. b에서 1을 뺀 이유는 주어진 날짜 b는 1부터 시작하지만, 배열의 인덱스는 0부터 시작하기 때문입니다.
for (let i = 0; i < a - 1; i++) { totalDays += monthDays[i]; }: 반복문을 사용하여 주어진 월 a 이전 월들의 일 수를 totalDays에 더합니다. 인덱스 i는 0부터 a - 2까지 증가하며, 해당 월의 일 수를 totalDays에 더합니다.
return days[(totalDays + 5) % 7];: 2016년 1월 1일이 금요일에 해당하므로, totalDays에 5를 더한 후 7로 나눈 나머지 값을 구합니다. 나머지 값은 0부터 6까지이므로, days 배열의 해당 인덱스에 저장된 요일을 반환합니다.