[프로그래머스] 2016년 문제

ppyororong_0_0·2022년 1월 16일
0

프로그래머스

목록 보기
8/19

[프로그래머스 - 1단계] 2016년 문제

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

📝 문제 설명

2016년 1월 1일은 금요일
2016년 a월 b일은 무슨 요일인지 return

  • 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT
  • 2016년은 윤년(2월을 29일로 둔 해)

💡 풀이

1. 1월 1일부터 a월 b일까지 계산했을 때의 총 일수 구하기

  • days배열 : 요일들이 들어있는 배열.
    인덱스 번호를 구할 때는 (totalDays % 7)로 구한다.
    1월 1일이 금요일이기 때문에 1 % 7 === 1이 되니까 1번 인덱스의 값은 금요일이다. 따라서 나머지가 0인 경우는 목요일!
    그리하여 목.금.토.일.월.화.수의 순서대로 요일을 설정하였다.
    const days = ['THU', 'FRI', 'SAT','SUN', 'MON', 'TUE', 'WED', ];

  • monthDays배열: 각 월마다 일수가 며칠인지 나타냄.
    (ex. 0번 인덱스에 해당하는 값 : 1월의 총 일수)
    const monthDays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

  • totalDays : a월 b일까지 총 며칠인지 계산하기 위한 변수
    ex. a = 5, b = 24로 날짜가 5월 24일이라면,
    monthDays의 0번 인덱스(1월)부터 3번 인덱스(4월)까지에 있는 값들을 더한다. 1~4월까지의 합이 totalDays에 누적된다.
    그리고 5월의 일수에 해당하는 b값까지 더해주면 총 totalDays를 구할 수 있다.

    나는 처음부터 b값을 totalDays의 값으로 설정해주었고 그다음에 전 월의 일수들을 더해주었다.

2. 요일 구하기: days배열에서 totalDays을 7로 나눈 나머지에 해당하는 인덱스의 값이 답

  • days[totalDays % 7]

🖥️ 코드

function solution(a, b) {
    let answer = '';
    const days = ['THU', 'FRI', 'SAT','SUN', 'MON', 'TUE', 'WED', ];
    const monthDays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    let totalDays = b;
    for (let i = 0; i < a - 1; i++) {
        totalDays += monthDays[i]; 
    }
    answer = days[totalDays % 7]; 
    return answer;
}

문제를 보는 즉시 총 일수를 구하여 7로 나누어서 풀어야겠다는 생각이
바로 떠오르지는 않았다...

profile
안녕하세요!

0개의 댓글