[Javascript] 프로그래머스 - 2016년

Isabel·2022년 3월 12일
0

알고리즘 문제풀이

목록 보기
12/36

문제 설명

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일같은 날짜는 주어지지 않습니다)

입출력 예

a b result
5 24 "TUE"

코드

function solution(a, b) {
    var answer = '';
    //매월의 일수를 배열로 선언
    let monthlyDay = [31,29,31,30,31,30,31,31,30,31,30,31] 
    //각 요일 배열 선언
    let date = ['SUN','MON','TUE','WED','THU','FRI','SAT']
    let totalDay = 0;
    for(let i = 0; i < a-1; i++){
      totalDay += monthlyDay [i] // 1~a월 전월까지의 일수를 누적 합
    }
    totalDay = totalDay + b + 4 
    // 1월부터 a월 말일까지의 총 일수 합에 해당 월의 날짜수 더함 + 4 (1월1일은 금요일 1월1일을 기준으로 하면 목요일이 0번째, 금요일이 1번째 값, date배열의 FRI는 date[5], 5번째 값으로 [1]번째값이 [5]로 이동했다고 계산)
    
    answer = date[(totalDay % 7)]
  
    return answer;
}

메소드를 사용하여서 계산한 경우

function solution(a, b) {
    return new Date(2016, a-1, b).toString().slice(0,3).toUpperCase();
}

Javascript의 Date클래스에는 다양한 메소드가 존재한다.
Date클래스를 사용할 때는
month는 1월부터 시작하는 기본 월이 아니라 index 기준으로 되어있어서 1월이라면 0이 들어가야한다.
2022년 1월 7일은 new Date(2022, 0, 7)으로 생각해야 한다.
new Date(2022, 0, 7)의 출력값은

Fri Jan 7 2022 00:00:00 GMT+0900 (한국 표준시)

이다.
이 값을 String으로 바꿔주고, 해당 String을 0번째 글자부터 3개를 잘라낸 뒤(Fri) 대문자로 변환하여 준다는 내용이다.

확실히 메소드를 알면 쉽게 풀 수 있는 문제들이 점점 많아질 것 같다.

0개의 댓글