공부/프로그래머스

프로그래머스 레벨 1 2016년 자바스크립트 풀이

두둥탁! 2021. 12. 28. 00:20
반응형

내 기준으로는 너무 어려웠다. Date 객체를 쓰지 않고 어떻게든 풀어보려고 했는데 머리가 터질 것 같아서 Date 객체를 써버리고 말았다.

 

-Date 객체를 이용한 풀이-

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

 

-Date 객체를 이용하지 않은 다른 사람의 풀이-

 

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

 

이 문제를 이런식으로도 처리할 수 있다는 것을 알고 놀라웠다. 입력 받은 b의 값에 1을 더해서 c에 넣고 그 c에 월의 마지막 일 수를 더하고 그 값을 7로 나눈 값의 나머지를 구해서 해결한다니...

b의 값에 1을 더해주는 이유는 1을 안 더해 주면 요일이 한 날씩 앞당겨지기 때문이다. (나머지가 day의 인덱스 값이기 때문에 나머지가 1 더 나올수 있도록 해주는 것임)

 

예를들어서 2월 29일의 요일을 구하고 싶으면 for반복문에 의해서 c = c + lastDayOfMonth[0] + lastDayOfMonth[1] 을 계산해줘야 한다. 여기서 a값은 2이고 b의 값은 29이다. c에는 b+1의 값이 들어가 있어서 c = 30 + 31 + 29 = 90이 되고 90/7=12, 나머지 6, 나머지가 day의 인덱스 값이니까 day[6]인 토요일이 2월 29일의 요일이 되는 것이다.

반응형