📝 문제풀이/프로그래머스
[Level 1] 2016년
NoHack
2022. 2. 27. 15:36
728x90
문제 설명
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일같은 날짜는 주어지지 않습니다)
문제 풀이
const solution = (a, b) => {
const week = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU'];
const day = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// 배열 인덱스 계산을 위해 하루는 빼고 시작
let result = b - 1;
for (let i = 0; i < a - 1; i++) {
result += day[i];
}
return week[result % 7];
};
const inputs = [[5, 24]];
inputs.forEach((input) => console.log(solution(...input)));
이 문제는 요일 관련 테이블을 만들어 놓고 사용하면 계산하기 편합니다. 풀이 코드의 입력값처럼 2016년 5월 24일의 요일을 구해야 한다면 먼저 24를 result에 담고, 1을 빼줍니다. 여기서 1을 빼는 이유는 나중에 week 배열을 참조해서 최종 결과를 낼건데, 배열의 인덱스가 1이 아닌 0부터 시작하기 때문입니다. 이후에는 반복문을 돌리면서 5월 이전인 1월부터 4월까지의 총 일수를 result에 누적하고, 모듈러 연산을 통해 최종 요일을 산출하면 됩니다.