본문 바로가기
알고리즘/프로그래머스

[프로그래머스][자바스크립트][Level1] 2016년

by Benjamin_Choi 2022. 1. 6.

 

1차 시도 - 9번, 13번 케이스 실패

// 9번, 13번 테스트 케이스 실패
function solution(a, b) {
    var mon = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    var day = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
    
    const acc_mon = [0];
    for (let i = 0; i < mon.length - 1; i++) {
        acc_mon.push(acc_mon[i] + mon[i]);
    }
    
    return day[((acc_mon[a - 1] + b) % 7) - 1];
}

9번, 13번 실패

테스트 및 분석

/**
 * 2016년.test.js
 */

const solution = require("./2016년");

test('5월 24일', () => {
    expect(solution(5, 24)).toBe("TUE")
});

test('Monday', () => {
    expect(solution(1,4)).toBe("MON")
});

test('Tuesday', () => {
    expect(solution(1,5)).toBe("TUE")
});

test('Wednesday', () => {
    expect(solution(1,6)).toBe("WED")
});

test('Thursday', () => {
    expect(solution(1,7)).toBe("THU")
});

test('Friday', () => {
    expect(solution(1,1)).toBe("FRI")
});

test('Saturday', () => {
    expect(solution(1,2)).toBe("SAT")
});

test('Sunday', () => {
    expect(solution(1,3)).toBe("SUN")
});

test 결과

Thursday 에서 THU 가 아니라 undefined 가 나와 문제가 생기는 것을 확인했다.

확인 결과 코드 마지막 줄에서 문제를 발견했다. 

return day[((acc_mon[a - 1] + b) % 7) - 1];

1월 1일이 FRI 인 관계로 day 배열의 시작을 FRI 로 두고 1월 1일의 경우 1이 나오므로 배열 인덱스 0에 맞춰주기 위해 -1 을 해줬는데, 그 결과 목요일의 경우 num % 7 이 0이 되고, 0에 -1을 해준 결과 목요일은 acc_mon[-1] 에 접근해 undefined 가 나온 것이다.

 

2차 시도 - 성공

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

테스트 결과를 기반으로 day 배열의 시작을 THU로 바꿔주고 마지막 줄의 -1을 빼주는 것으로 해결했다. 

 

 

 

 

 

 

댓글