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일같은 날짜는 주어지지 않습니다)
a b result
5 24 "TUE"
function solution(a, b) { let answer = ""; let day = 0; const week = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]; if (a % 2) { if (a == 1) day = b; else day = 61 * Math.floor(a / 2) + b; if (a > 8) day++; } else { if (a == 2) day = (a / 2) * 31 + b; else day = (61 * a) / 2 - 30 + b; } if (a > 2) day--; answer = week[day % 7]; return answer; }
1월은 그냥 b,
3월부턴 31 M + 30 M + b => 따라서 61 * M + bif (a % 2) { if (a == 1) day = b; else day = 61 * Math.floor(a / 2) + b; }
2월일 땐 1월만 고려한다.
그 이후부턴 31 a/2 + (30 a/2 - 1) + b => 따라서 61 * a/2 - 30 + bif (a == 2) day = (a / 2) * 31 + b; else day = (61 * a) / 2 - 30 + b;
31 (M + 1) + 30 (M - 1) + b => 따라서 61 * M + 1 + b
즉, 홀수 달 수식에 1만 더해주면 됨if (a > 8) day++;
// 제일 깔끔해 보였던 풀이 function getDayName(a,b){ var date = new Date(2016, (a - 1), b); return date.toString().slice(0, 3).toUpperCase(); }
// 많은 사람들이 이와 같이 푼 것을 확인할 수 있었다. var MONTH = [31,29,31,30,31,30,31,31,30,31,30,31];