본문 바로가기
Algorithm

[프로그래머스] 2016년 (Python, JS)

by YGSEO 2021. 1. 25.
728x90

Python

days = ['THU','FRI','SAT','SUN','MON','TUE','WED']
months = [31,29,31,30,31,30,31,31,30,31,30,31]


def solution(a, b):
    my_days = (sum(months[:a-1]) + b) % 7
    answer = days[my_days]
    # answer = []
    return answer

달별로 날짜 계산를 활용해야겠다는 생각까지는 했는데 %(modulo) 오퍼레이터를 사용해서 나머지를 활용한 indexing까지는 생각이 안났다.

 


Javascript

Javascript로 Sum을 하기위해서 찾아보니 reduce를 사용한다고 나온다.

하지만 slicing할 때 1월일 경우 start = end인 상황에서 에러가 발생.

 

다른 솔루션들을 검색해보니 getDay라는 메서드를 사용하면 바로 풀리긴하는데,

getDay를 안쓰고 해결하는 방법들은 나처럼 slicing을 하지 않고 "+="를 사용해서 해결하는 방법이 존재한다.(for loop를 사용해야 한다는 점)

어쨋든 python처럼 sum을 사용하려고 찾으려다가 reduce를 배웠다는 것.

function solution(a, b) {
    let days = ['THU','FRI','SAT','SUN','MON','TUE','WED'];
    let months = [31,29,31,30,31,30,31,31,30,31,30,31];
    let tmp = 0
    for (let i=0; i < a-1; i++) {
      tmp += months[i];
    };

    let answer = days[(tmp+b) % 7]
    
    return answer;
}

getDay 메서드 솔루션

function solution(a, b) {
    let answer = '';
    let  day=["SUN","MON","TUE","WED","THU","FRI","SAT"]
    const date = new Date(`2016,${a},${b}`);
    answer = (day[date.getDay()])
    return answer;
}

Array.prototype.reduce()

The reduce() method executes a reducer function (that you provide) on each element of the array, resulting in single output value.

const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;

// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10

// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
// expected output: 15

 

728x90

댓글