Lv1. 2016년

박하린·2021년 5월 30일
0

프로그래머스

목록 보기
8/42

📚 문제

2016년
https://programmers.co.kr/learn/courses/30/lessons/12901

💡 접근

1월부터 주어진 월 전까지 해당 월의 일수를 모두 더하고 거기에 주어진 일수를 더해서 -1(1월 1일을 기준으로 7로 나눈 나머지에 따라 요일을 결정하기 때문에 하루를 빼주어야 한다.) 한것에서 7을 나눈 나머지가 0이면 금요일, 1이면 토요일 .. 이런식으로 접근하였다.

  • 예를 들어 3월 5일이면
    1~2월까지 일수 = 31 + 29(윤년임) = 60
    60 + (5 - 1) = 64
    64 % 7 = 1
    나머지가 1이면 "SAT"

⌨️ 코드

function solution(a, b) {
  let dayObject = {
    2: "SUN",
    3: "MON",
    4: "TUE",
    5: "WED",
    6: "THU",
    0: "FRI",
    1: "SAT",
  }; // 마지막에 나머지값에 대응하는 요일을 리턴하기위해 날짜 객체를 {나머지(key) : 요일(value)} 선언해줌 
  let sum = 0;

  for (let m = 1; m < a; m++) { // 1월부터 a월 전까지 반복
    if (m === 2) sum += 29; // 윤년이라 2월 29일까지이다.
    else if (m === 4 ||m === 6 || m === 9 || m === 11) sum += 30; // 30일까지 있는 달
    else sum += 31; // 나머지는 31일까지
  }

  return dayObject[(sum + (b - 1)) % 7]; 
}

📝 리뷰

첨엔 매달 마지막날의 요일을 다 구해서 다음달의 1일의 요일을 구하는 과정을 계속 반복해야 하는 방법이 떠올랐는데 구현을 어떻게 해야할 지 몰랐다.
근데 그냥 일수를 다 더해주면 되는거였는데 너무 어렵게 생각했던 것 같다.ㅎㅎ

profile
깃허브: https://github.com/khakaa

0개의 댓글

관련 채용 정보