ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Level 1 | 2016년_JavaScript
    Coding Test/Programmers Level 1 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]

    댓글

Designed by Tistory.