코딩테스트 #5 프로그래머스 2016년

Jake Seo·2020년 6월 23일
1

프로그래머스 LV1

목록 보기
5/36

문제

풀이

스스로 요일을 구하는 공식을 세워서 풀면 될 것 같습니다.

2016년 a월 b일의 요일을 세우는 공식은?

먼저 요일은 7개밖에 없으니 2016년 1월 1일 금요일을 기준으로 아래와 같이 진행될 것입니다.
week = ['금요일', '토요일', '일요일', '월요일', '화요일', '수요일', '목요일']

그 이후로는 계속 반복됩니다.

그렇다면, 1월 1일로부터 며칠 지났는지 % 총 요일의 수 를 하면 될 것입니다.

1월 1일의 경우는 1월 1일로부터 0일 지났으므로
week[0]는 '금요일'입니다.

1월 2일의 경우는 1월 1일로부터 1일 지났으므로
week[1]는 '토요일'입니다.

이렇게 365일 전부의 요일의 수를 구할 수 있을 것입니다.

그렇다면, 며칠 지났는지는 어떻게 구하는가? 기본적으로 월, 일로 날짜를 표현하기 때문에, 앞선 월들이 몇 일을 가지고 있는지 알아야 합니다.

1월부터 각 월이 갖고 있는 일의 숫자는 [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]입니다.

그렇다면 지난 월의 총 일수 + 일 - 1로 며칠 지났는지를 구할 수 있습니다.

코드는 다음과 같이 나옵니다.

function solution(a, b) {
    let daysOfEachMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    let dayNames = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
    let sumOfDays = b;
    
    for(let i=0; i<a-1; i++) {
        sumOfDays += daysOfEachMonth[i];
    }
    
    return dayNames[(sumOfDays - 1) % dayNames.length];
}

다른 풀이

사실 자바스크립트 내장 객체 중에 Date 객체가 있다. 이 객체를 사용하면 더욱 쉽게 풀 수 있습니다.

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

console.log(getDayName(5,24));

위와 같이 Date 객체를 이용하면 즉각적으로 몇년 몇월 며칠이 어떤 요일인지 구할 수 있습니다. 단, toString() 메소드를 이용하여 답을 제출하는 것은 서버의 locale에 따라 정답과 오답이 결정되므로 ...

function getDayName(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];
}

console.log(getDayName(5,24));

위와 같은 형식으로 하는 것이 더 정확할 것입니다.

profile
풀스택 웹개발자로 일하고 있는 Jake Seo입니다. 주로 Jake Seo라는 닉네임을 많이 씁니다. 프론트엔드: Javascript, React 백엔드: Spring Framework에 관심이 있습니다.

0개의 댓글