Coding Test/Programmers Level 1

Level 1 | 2016년_JavaScript

pathas 2020. 3. 19. 15:24

문제 설명

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

코드

// ① 요일 배열 지정하기
const solution = (month, date) => {
    var WEEK = [
        "SUN",
        "MON",
        "TUE",
        "WED",
        "THU",
        "FRI",
        "SAT"
    ];
    var day = WEEK[new Date(2016, month - 1, date).getDay()]
    return day;
}

// ② 바로 출력하기
const solution = (month, date) => {
    return new Date(2016, month - 1, date)
        .toString()
        .slice(0, 3)
        .toUpperCase();
}

 


풀이

① 요일 배열 지정하기

먼저 일요일부터 토요일까지 순서대로 출력 결과물이 담긴 배열을 선언한다.
그 다음은 자바스크립트의 Date객체와 그 메소드를 이용한 것인데,
Date객체를 생성할 때 년도와 월 일을 지정하면 지역에 따른 해당 시간을 반환한다.
그렇게 생성된 Date객체에 getDay()메소드를 사용하면 요일을 [0~6]의 값으로 반환하는데

각각의 값은 위에서 선언한 배열과 같은 순서로 [일요일~월요일]에 해당한다.
따라서 getDay()로 인해 반환된 값의 인덱스에 해당하는 WEEK배열의 요소를 day에 담고 해당 값을 반환함으로써 문제를 풀 수 있다.


② 바로 출력하기

Date 객체를 사용하는 것까지는 위의 풀이 방법과 동일하다.
new Date()로 객체를 생성하면 'Thu Mar 19 2020 14:22:52 GMT+0900 (대한민국 표준시)' 와 같은 값이 반환된다.
내용을 보면 가장 앞의 3글자가 요일에 해당함을 알 수 있다.
따라서 해당 Date객체를 toString()메소드를 이용해서 문자열로 변환하고
slice()함수로 1~3번째 문자열을 추출해서 대문자로 변환(toUpperCase())하면 문제를 해결할 수 있다.

 

문제 출처: [https://programmers.co.kr/learn/courses/30/lessons/12901?language=javascript]