코딩/코딩테스트

[프로그래머스/JS] 2016년

이즈99 2024. 6. 13. 19:41
728x90

[문제]

[코드]

function solution(a, b) {
    var answer = '';
    const day = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
    const dayofMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    let days = 0;
    
    for(let i =0 ; i < a - 1; i++)
        {
            days += dayofMonth[i];
        }
    
    
    days += b - 1;
    
    answer = day[days % 7];
    
    return answer;
}

[풀이]

기본적으로 2016년의 각 달을 알고 있어야 하는 문제이다.

2016년의 각 달의 총 수를 dayofMonth에 배열로 저장해둔다. 1월 1일이 금요일이라면, 기본적으로 첫번째 금요일은 0, 토요일 1, ~~~ 목요일 6과 같이 할 수 있다. 우리는 이것을 보고 7로 나눴을 때 나머지 값이 0~ 6까지 존재한다는 사실을 기억해낸다면 해당문제를 해결 하기가 쉬워진다. 정답을 넣어줄 day 배열을 "FRI" 부터 0번째로 두고 계산을 시작한다. 각 달의 날을 구해야하는데 a의 값까지 배열을 그대로 돌린다면 안된다. 예시와 같이 5월까지 배열을 진행한다면,

그냥 for문에서는 dayofMonth[4] 까지 진행하게 되는데 dayofMonth[4]의 값은 5월의 값이므로 이 값을 더해진다면 6월달의 값이 적용된다. 해당 문제를 해결하기 위해서 a -1 까지 days의 달수를 더해준다.

그리고 일 수를 적용해주면 되는데, days의 그냥 b를 합치면 안된다. 1월1일 같은 경우 1의 값이 들어갈때 b의 값이 1이 아니라 0이여야 day[0] 즉 금요일이 나오기 때문에, days의 값을 b - 1 한 값에 더해주고 해당 값에 7을 나눠 나머지를 구해서 해당하는 day배열 값을 구해주면 문제를 해결할 수 있다!

 

[다른사람의 풀이]

function getDayName(a,b){
    var tempDate = new Date(2016, a-1, b);

    return tempDate.toString().slice(0,3).toUpperCase();
}

js에서 Date함수를 통해 해당하는 달과 일의 날짜를 구할 수 있다.

하지만 다른 함수에서도 똑같은 작용을 알 수 없기 때문에, 원래 쓰던 풀이를 작성해도 괜찮을 것 같다!