내용 복습/알고리즘

프로그래머스 1단계 - x만큼 간격이 있는 n개의 숫자

jskim4695 2024. 1. 11. 10:36
function solution(x, n) {
    var answer = [];
    for(let i=1; i<=n; i++) {
        answer.push(x*i)
    }
    return answer;
}

 

나는 이렇게 for문으로 풀었는데, 뭔가 더 좋은 풀이법이 있을 것 같아 다른사람의 풀이를 봤더니 

 

function solution(x, n) {

return Array(n).fill(x).map((v, i) => (i+1) * v)

}

 

이렇게 짧은 코드로 나왔다.

 

array.fill.map을 체이닝해서 만든 로직인데 사실 fill이라는 배열 내장 메소드가 있는지도 처음 알았다.

 

 

fill()

arr.fill(value, start, end);

 

첫번째 인자인 value만 필수값이고 시작인덱스와 끝인덱스는 옵셔널이다.

 

 

map()

arr.map(callback(currentValue, index, array));

매개변수로 콜백함수를 받는데 3가지 인자를 가질 수 있다. index, array는 선택사항이다.

 

[1,2,3].map((v, i) => (v + i));
// 실행 결과 :  [1, 3, 5]

위 코드에서 v는 배열의 각각 요소인 1,2,3을 가리키게 된다. i는 index를 나타내며 0, 1, 2가 될 것이다. 

 

Array(n).fill(x)는 길이가 n이고 모든 요소가 x인 배열을 생성한다. 그 후 map() 함수를 사용, 배열의 각 요소를 수정한다.

map() 함수의 인자로 전달된 콜백함수는 배열의 각 요소에 대해 실행되며 현재 요소의 값을 나타내는 v와 인덱스 i를 인자로 받는다.

 

그리고 (i+1) * v 값은 배수를 나타낸다. i+1인 이유는 배열의 index가 0부터 시작하기 때문이다.

 

간결하고 좋아서 열심히 정리했지만 퍼포먼스는 for문 쪽이 더 좋다고 한다.