코딩테스트 | (JavaScript) 프로그래머스 : 2016년

trevor1107·2021년 8월 30일
0

✅문제

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

🎹📢입출력 예제

✍풀어보기

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

// 다른 방법
function solution(a, b) {
    // 윤년은 2월이 29일까지 있고, 1년이 366일이다.
    // 4, 100, 400으로 나누어지는 년도는 윤년이다.
    const weekToDay = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
    const leapYearMonths = [31,29,31,30,31,30,31,31,30,31,30,31]; 
    let day = b+4; // 1월 1일은 FRI, b가 1일 때 인덱스로는 5가 되어야한다.
    // 1월은 이전 월의 일수를 더하지 않음으로 a-1 조건으로 해야한다.
    for(let i = 0; i < a-1; ++i){
        day += leapYearMonths[i];
    }
    return weekToDay[day%7];
}

자바스크립트에서 지원하는 Date 클래스를 이용해서 손 쉽게 풀 수 있었다.
Date의 매개변수는 다양하게 구성되어 있는데, 최대 밀리초 단위까지 구성되어있다.
new Date(), new Date(value), new Date(dateString),
new Date(year, monthIndex ...)
*주의 할 점은 month는 일반 월이 아니라 인덱스로 되어있어서 1월이라면 0이 들어가야한다.
2021년 8월 30일new Date(2021, 7, 30)으로 구성하면 된다.
결과는 Mon Aug 30 2021 00:00:00 GMT+0900 (한국 표준시) 이다.

dateString의 경우 'December 17, 1995 03:24:00' 또는 '1995-12-17T03:24:00' 같은 표기가 해당한다.

클래스이기 때문에 toString() 함수를 통해서 문자열로 변환 시키고 0번째 부터 글자 3개를 잘라 대문자로 변환해서 리턴해서 원하는 결과를 얻었다.

두번째 방법은 정말 원시적으로 푼 것인데, 윤년의 경우는 1년이 366로 평년보다 1일 많고, 1일 많은 것이 2월이라 29일까지 있기 때문에 검색을 통해서 월별 일수를 찾아서 배열에 담아야했다.
그리고 2016년의 1월 1일의 경우 금요일이라고 했기 때문에, 인덱스가 5가 되어야해서 4를 더해주었다. 전 월의 일수를 더해주고 7로 나눈 나머지 값으로 인덱스를 구해 요일을 표시했다.


🎈다른 사람의 풀이

var solution=(m,d)=>(new Date('2016-'+m+'-'+d)+'').split(' ')[0].toUpperCase()

// 또 다른 방법
var solution=(_,$)=>(new Date(2016,--_,$)+'').toUpperCase().slice(0, 3)

첫 번째 풀이 방법은 new Date(dateString) 생성자를 이용한 방법이다.
문자열로 만들어주고 구분자를 공백으로 나누어서 첫번째 인덱스의 문자열을 대문자로 변환시켜 반환한다.

두 번째 풀이 방법은 new Date(year, monthIndex, day) 생성자를 이용한 방법이다.
두 번째 매개변수가 Index라서 1을 빼서 넣어주고 있다. _$는 그냥 매개변수의 이름일 뿐이다. 가독성이 좋지 않아서 선호하지 않는 방법이다. 자바스크립트에서는 변수의 이름으로 허용하기 때문에 가능한 것이라서 다른 언어에서는 허용되지 않을 수 있다.



참고 자료 및 사이트 (감사합니다)

profile
프론트엔드 개발자

0개의 댓글