프로그래머스/Lv1

[프로그래머스/Javascript] Lv.1 2016년

woo.oing 2026. 1. 19. 17:21

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;
}

 

윤년 계산 문제는 개발자라면 한 번쯤 풀게 되는 문제 같은데 이번 문제를 풀면서 윤년 계산식도 다시 정리도 하고 반가웠습니다 ㅎㅎ