본문 바로가기
Coding Test/JavaScript

[프로그래머스] 2016년 JavaScript Code

by giem 2022. 8. 20.
반응형

이전 포스트에 이어

프로그래머스 2016년을 JavaScript로 풀어보겠다.

 

다른 언어 풀이를 보고 싶다면 아래 링크를 확인해보자

2022.08.20 - [Coding Test/Python] - [프로그래머스] 2016년 Python Code

2022.08.20 - [Coding Test/C++] - [프로그래머스] 2016년 C++ Code

2022.08.20 - [Coding Test/Go] - [프로그래머스] 2016년 Go Code


문제


구현

구현은 2016년 안에서만 계산하면 되기 때문에

모든 월의 일 수와 요일들을 배열에 넣고

결괏값을 계산했다.

 

코드로 보겠다.


코드
function solution(a, b) {
    var day = ['FRI','SAT','SUN','MON','TUE','WED','THU'];
    var month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    var sum;
    if(a < 2) {
        sum = b - 1;
    } else {   
        sum = month.slice(0, a - 1).reduce((a, b) => a + b) + b - 1;
    }
    return day[sum % 7];
}

a-1까지 반복문을 돌아서

month를 sum 해서 추가하고 일을 추가해서 계산할 수 있게 했다.

 

여기서 reduce를 사용했는데 reduce에 대한 추가 설명과

비슷한 문제를 풀어보고 싶으면 아래 링크를 확인해보자

2022.07.29 - [Coding Test/JavaScript] - [프로그래머스] 내적 JavaScript Code

 

day 배열은 mod(%) 연산과 맞게 하기 위해

금요일부터 배열에 넣었다.


다른 풀이

JS에서도 출제자의 의도를 회피하기 위해 days를 써서 풀어보았다

function solution(a, b) {
    var arr = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
    var date = new Date(`2016-${a}-${b}`);
    var day = date.getDay()
    return arr[day];
}

Date 객체를 써서 아주 간단하게 풀 수 있다.

 

이 방법도 여러 연도가 있다면 훨씬 괜찮은 방법이고 아주 간단하게 풀 수 있다.

 

코딩 테스트라는 특수한 환경이 아니라면 Date 객체를 사용하는 게 일반적이긴 하다.

반응형

댓글