https://school.programmers.co.kr/learn/courses/30/lessons/12901
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✓ 풀이과정
2016년 1월 1일 금요일 윤년이라는 제시 조건을 가지고 n월 n일이 어떤 요일인지 출력하면 되는 문제였습니다
윤년에 해당하는 2016년만 고려해서 구현하면 되지만 다른 윤년/평년에 적용해도 돌아가는 코드로 구현했습니다
1. 각 월별 일자를 계산해서 1월 1일부터 12월 31일까지 순회하며 요일은 금요일 시작으로 함께 반복하며 전달받은 날짜와 일치하면 현재 요일을 반환합니다
참고. 월별 일수 계산과 윤년 계산 방법
윤년 계산 조건
윤년: 2월이 29일인 해 기본 월별 날짜1월 - 31일2월 - 28일 (윤년은 29일)3월 - 31일4월 - 30일5월 - 31일6월 - 30일7월 - 31일8월 - 31일9월 - 30일10월 - 31일11월 - 30일12월 - 31일 윤년의 조건- 4로 나눠 떨어지
woooing.tistory.com
✓ 최종코드
function solution(a, b) {
let year = 2016;
let month = a;
let day = b;
let daysOfWeek = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
let answer = "";
const isLeapYear = (year) => {
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
};
const countDays = (month) => {
if ([1, 3, 5, 7, 8, 10, 12].filter((m) => m === month).length) return 31;
else if ([4, 6, 9, 11].filter((m) => m === month).length) return 30;
else if (month === 2 && isLeapYear(year)) return 29;
else return 28;
};
const findDayOfWeek = (month) => {
let dayOfWeek = 5;
for (let i = 1; i <= 12; i++) {
for (let j = 1; j <= countDays(i); j++) {
if (i === month && j === day) return daysOfWeek[dayOfWeek];
dayOfWeek = (dayOfWeek + 1) % 7;
}
}
};
answer = findDayOfWeek(month);
return answer;
}
윤년 계산 문제는 개발자라면 한 번쯤 풀게 되는 문제 같은데 이번 문제를 풀면서 윤년 계산식도 다시 정리도 하고 반가웠습니다 ㅎㅎ
'프로그래머스 > Lv1' 카테고리의 다른 글
| [프로그래머스/Javascript] Lv.1 문자열 나누기 (0) | 2026.01.21 |
|---|---|
| [프로그래머스/Javascript] Lv.1 둘만의 암호 (0) | 2026.01.20 |
| [프로그래머스/Javascript] Lv.1 공원 산책 (0) | 2026.01.19 |
| [프로그래머스/Javascript] Lv.1 완주하지 못한 선수 (0) | 2026.01.15 |
| [프로그래머스/Javascript] Lv.1 모의고사 (0) | 2026.01.15 |