ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 항해 99 - 2016년
    알고리즘 공부/JavaScript 문제 2023. 4. 16. 15:45

    [ 문제 ]

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

     

    [ Input / Output 예시 ]

    a b Output
    5 24 TUE

     


    [ 풀이 ]

    이번에 문제를 풀면서 사실 고민을 많이 했다. for문으로 풀 것이냐? 날짜 자료구조를 사용할 것이냐?

    for문을 사용하는 알고리즘은 과거에 아예 캘린더 만들기 실습을 하면서 많이 사용했으므로 메소드를 사용하기로 결정했다.

    풀이(1)과 (2)는 똑같이 Date 자료형을 사용하지만 Input에 따라 약간의 차이가 있어서 정리하기 위해 따로 풀이를 작성했다. Date에 대한 자세한 내용은 따로 정리 필요!

     

    풀이 (1)

    Date 자료형에 날짜 포맷으로 데이터를 집어넣는다면 별도의 처리 없이 진행해주면 된다.

    현재 날짜는 2016년은 고정이고 월과 일을 따로 받으므로 백틱을 사용해서 날짜 형태 문자열로 변경해서 진행한다.

    요일이 궁금할때 .getDay() 메소드를 사용한다. 요일은 일요일부터 토요일까지 0~6 숫자로 반환된다.

     

    풀이 (2)

    Date 자료형에 날짜 포맷이 아닌 Date(년, 월, 일) 이렇게 따로 파라미터로 넣어준다면 월은 1~12월이 아니라 0~11월이므로 1을 뺴고 넣어줘야 한다.

     

    [ 코드 ]

    // 풀이 (1)
    // Date를 이용하여 날짜 자료형을 만들어서 getDay();
    const solution1 = function (a, b) {
        const weekName = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
        let date = new Date(`2016-${a}-${b}`).getDay();
    
        return weekName[date];
    }
    
    console.log(solution1(5, 24));   // TUE
    
    // 풀이 (2)
    // Date를 이용하여 날짜 자료형을 만들어서 getDay();
    // Date자료형에 매개변수로 년, 월, 일로 따로 넣는다면 월은 0부터 시작이므로 -1을 해줘야 한다.
    const solution2 = function (a, b) {
        const weekName = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
        let date = new Date(2016, a-1, b).getDay();
    
        return weekName[date];
    }
    
    console.log(solution2(5, 24));    // TUE

    댓글

Designed by Tistory.