JavaScripts 문제

문제 54. (중요)2016년(난이도 10)(Date Class)

kagan-draca 2024. 8. 2. 15:46

 

일단,

 

let day = 

{

    0 : "FRI",
    1 : "SAT",
    2 : "SUN",
    3 : "MON",
    4 : "TUE",
    5 : "WED",
    6 : "THU",

}

FRIDAY ~ THURSDAY 까지 0 ~ 6으로

딕셔너리에 표현해줬다.

 

이후,

 

let month =
{

     1 : 31,
      2 : 29,
      3 : 31,
      4 : 30,
      5 : 31,
      6 : 30,
      7 : 31,
      8 : 31,
      9 : 30,
      10 : 31,
      11 : 30,
      12 : 31

}

1 ~ 12월까지 총 날짜를 month 딕셔너리에 정리했다.

 

for(let i = 1; i <= a; i++)

{

    for(let j = 1; j <= month[i]; j++)
    {

        if(i == a && j == b) break;
        count++
    }

}

로 2016년 1월 1일 ~ 2016년 a월 b일까지

며칠이 걸리는지 count로 계산하고,

 

return day[count & 7]

로 요일을 찾아냈다.

 

count % 7이 가능한 이유는,

한 주가 7일로 반복되기 때문이다.

 

제출한 코드 :

 

function solution(a, b) {
    let day = 
    {
        
        0 : "FRI",
        1 : "SAT",
        2 : "SUN",
        3 : "MON",
        4 : "TUE",
        5 : "WED",
        6 : "THU",
    }
    let month =
    {
        1 : 31,
        2 : 29,
        3 : 31,
        4 : 30,
        5 : 31,
        6 : 30,
        7 : 31,
        8 : 31,
        9 : 30,
        10 : 31,
        11 : 30,
        12 : 31
    }
    let count = 0;
    for(let i = 1; i <= a; i++)
    {
        for(let j = 1; j <= month[i]; j++)
        {
            if(i == a && j == b) break;
            count++
        }
    }
    return day[count % 7]
}

 

 

 

문제를 다 풀고 다른 사람들의 코드를 분석한 결과

Date Class를 사용한 풀이법이 존재했다.

(슬슬 Class가 나오기 시작하는구나~)

 

Date Class 사용법은

let 변수이름 = new Date(연도, 월, 일, 시, 분, 초, milli 초)

가능하다.

 

이때,

 

(중요)

연도 :  1 ~ 현재 연도,

월 : 0 ~ 11

일 : 1 ~ 그 달에 마지막 날짜,

시 : 0 ~ 23

분 : 0 ~ 59

초 : 0 ~ 59

milli 초 : 0 ~ 999

(중요)

 

(컴퓨터는 1초가 1000초)

로 초기화가 가능했다.

 

특이하게 월은 index 표기법으로

0 ~ 11가 1 ~ 12월까지 였다.

(일관성 없는거 불편...)

 

그렇게

let date = new Date(2016, a - 1, b).getDay()

해당 요일을 받아왔는데

 

(중요)

0 : 일요일

1 : 월요일

2 : 화요일

3 : 수요일

4 : 목요일

5 : 금요일

6 : 토요일

(중요)

 

을 의미한다고 한다.

 

그래서

 

let day = ["SUN","MON","TUE","WED","THU","FRI","SAT"]

로 요일을 영문자로 표현할 수 있게 해줬고

return day[date] 해줬다.

 

제출한 코드 : 

 

function solution(a, b) 
{
    let day = ["SUN","MON","TUE","WED","THU","FRI","SAT"]
    let date = new Date(2016,a - 1,b).getDay();
    return day[date]
}

 

 

 

추가적으로 Date Class의 Set함수Get함수를 알아 보자면,

가 있었고,

 

위 함수들로

처럼 사용 가능하고,

 

문자열 변환 함수로

가 있다.

 

제출한 코드 : 

 

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

날짜를 문자열로 변환해 요일 부분만

편집으로도 표현 가능했다.