프로그래머스 문제풀이/Level 1

[프로그래머스] x만큼 간격이 있는 n개의 숫자

류시명 2020. 4. 15. 15:37

문제 설명

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

제한 조건

  • x는 -10000000 이상, 10000000 이하인 정수입니다.
  • n은 1000 이하인 자연수입니다.

입출력 예

x n answer
2 5 [2,4,6,8,10]
4 3 [4,8,12]
-4 2 [-4, -8]

접근

n번 반복하는 반복문을 만든다. 그 안에서 x부터 answer 배열에 집어넣되, 반복할 때마다 x씩 증가시켜 집어넣는다.

구현

const solution = (x, n) => {
    let answer = [];
    let value = x; // 배열에 들어갈 값 초기화

    // n번 반복
    for (let i = 0; i < n; i++) {
        answer.push(value); // 초기값 넣기
        value += x; // x만큼 증가
    }

    return answer;
};

다른 사람의 풀이

Array.prototype.fill()Array.prototype.map()을 이용한 멋진 풀이.

나도 이렇게 함수형으로 잘 풀어보고 싶다.

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

Array.prototype.fill()

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/fill

빈 배열을 만들 때 반복문을 사용하곤 했는데

아래 구문처럼 작성하면 반복문 없이도 빈 배열을 만들 수 있겠다.

Array(3).fill(0);

예제

[1, 2, 3].fill(4);               // [4, 4, 4]
[1, 2, 3].fill(4, 1);            // [1, 4, 4]
[1, 2, 3].fill(4, 1, 2);         // [1, 4, 3]
[1, 2, 3].fill(4, 1, 1);         // [1, 2, 3]
[1, 2, 3].fill(4, 3, 3);         // [1, 2, 3]
[1, 2, 3].fill(4, -3, -2);       // [4, 2, 3]
[1, 2, 3].fill(4, NaN, NaN);     // [1, 2, 3]
[1, 2, 3].fill(4, 3, 5);         // [1, 2, 3]
Array(3).fill(4);                // [4, 4, 4]
[].fill.call({ length: 3 }, 4);  // {0: 4, 1: 4, 2: 4, length: 3}

// Objects by reference.
var arr = Array(3).fill({}); // [{}, {}, {}]
arr[0].hi = "hi"; // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]
반응형