[프로그래머스] JS - Lv.1 - 2016

·2023년 9월 23일
0

코테 풀기

목록 보기
19/26
post-thumbnail

요즘 계속 공부, 공모전, 다른 일들 하느라 바쁘다는 핑계로 안하고 있어서 해이해진 마음을 다잡기 위해 . . . 다시 코테를 잡았다😶‍🌫️
핑계대지 말고 꾸준히 풀자 ..!!👊


2016

문제

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

문제 바로가기

프로그래머스-2016


💡풀이 코드

  1. a값보다 이전의 월(a-1)의 day값만 더해주기
    ex) a=5-> days = 1월(31), 2월(29), 3월(31), 4월(30) 더해주기
    ( 4월의 인덱스 값은 3임. 반복문: i < a-1 )
  2. b의 값은 더해주기
    ex) 1월 2일 = 2, 2월 2일 = 31+2=33
  3. 구한 days 값을 7로 나누어 요일 return
function solution(a, b) {
    var days = 0
    const month = [31,29,31,30,31,30,31,31,30,31,30,31]
    for (let i=0; i< a-1; i++){
        days += month[i]
    }
    days += b
    switch (days % 7){
        case 1:
            return "FRI"
        case 2: 
            return "SAT"
        case 3:
            return "SUN"
        case 4:
            return "MON"
        case 5:
            return "TUE"
        case 6:
            return "WED"
        default:
            return "THU"

    }
}

👀다른 사람의 풀이 코드

다른 분의 풀이를 보니 Date 객체를 사용하여 풀으셨다.

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];
}

해당 코드로 돌려봤을 때 성공은 했으나 .. 내가 푼 풀이로는 다 비슷한 0.05ms로 나왔는데 Date 객체를 사용하면 특정 케이스는 시간이 더 걸리는 것으로 나타난다.

원인으로는 getDay()로 예상하고 있는데 정확히 자료가 잘 안나와서ㅠㅠ 좀 더 찾아보고 따로 정리해봐야할 것 같다.

0개의 댓글