반응형
Notice
Recent Posts
Archives
Today
Total
Link
관리 메뉴

꾸준하게

[JS코테] 2016년 본문

JS코딩테스트

[JS코테] 2016년

DaeunCoding 2024. 1. 2. 17:08
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/12901

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[나의 풀이]

function solution(a, b) {
    let dayArr = ['THU','FRI','SAT','SUN','MON','TUE','WED'];
    let num;
    switch (a) {
        case 1 : 
            num = b;
            break;
        case 2 :
            num = 31 + b;
            break;
        case 3 :
            num = 31 + 29 + b;
            break;
        case 4 :
            num = 31 * 2 + 29 + b;
            break;
        case 5 :
            num = 31 * 2 + 29 + 30 + b;
            break;
        case 6 :
            num = 31 * 3 + 29 + 30 + b;
            break;
        case 7 :
            num = 31 * 3 + 29 + 30 * 2 + b;
            break;
        case 8 :
            num = 31 * 4 + 29 + 30 * 2 + b;
            break;
        case 9 :
            num = 31 * 5 + 29 + 30 * 2 + b;
            break;
        case 10 :
            num = 31 * 5 + 29 + 30 * 3 + b;
            break;
        case 11 :
            num = 31 * 6 + 29 + 30 * 3 + b;
            break;
        case 12 :
            num = 31 * 6 + 29 + 30 * 4 + b;
            break;
    }
    return dayArr[num % 7];
}

console.log(solution(11, 1))

 

코드가 좀 길어지긴 했지만 switch를 사용하여 각각의 월마다 1월 1일부터 며칠이 지났는지를 계산하여 7로 나누어 요일을 구하였다.

 

[다른 풀이]

function solution(a, b) {
    const monthDay = [31,29,31,30,31,30,31,31,30,31,30,31]
    const weekDay = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]

    let days = b
    for(let i=0 ; i<a-1 ; i++)
        days += monthDay[i];

    return weekDay[days%7];
}

 

각 달마다의 날짜 수를 배열로 표현하는 방법은 생각지 못했다.

 

나도 month배열을 추가하여 다시 풀어보았다.

 

[나의 두 번째 풀이]

function solution(a, b) {
    const monthArr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    const dayArr = ['THU','FRI','SAT','SUN','MON','TUE','WED'];
    let num = b;
    for(let i = 0; i < a; i++) {
        num += monthArr[i];
    }
    return dayArr[num % 7];
}

 

나는 a=1일 경우 어떻게 할지 고민하다가 monthArr에 0을 추가했는데,

위의 [다른 풀이]에서는 for 조건에 i < a-1로 제한을 두어 a=1일 경우 조건이 안되므로 그냥 b가 출력되게 코딩하였다.

 

그리고 변수 이름 자체도 num은 너무 포괄적이므로 [다른 풀이]처럼 days로 표현하는 게 더 적합해 보인다.

 

그리고, 또 다른 풀이에서는 Date 객체를 사용했다.

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

 

new Date(2016, a-1, b)를 하면

Mon May 23 2016 00:00:00 GMT+0900 (한국 표준시)

이렇게 리턴이 되고 맨 앞 세 단어를 잘라서 대문자로 변환하여 리턴한 것이다.

 

이 new Date()는 알아두면 좋을 것 같다.

 

오늘의 코테일기 끝! 

728x90
반응형