기록/Programmers

[Programmers] x만큼 간격이 있는 n개의 숫자

toppoo 2022. 10. 5. 11:10

문제 설명

함수 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]

나의 문제 풀이

function solution(x, n) {
    let answer = [];
    let i = 0;
    
    for (i = 0; i < n; i++) {
        answer.push(x);
        x += answer[0];
    }
    
    return answer;
}

- 주어진 정수 x를 배열에 넣는다.

- x 에 배열의 첫 번째 요소를 더한다. (주어진 정수 x)

- 위 과정을 n 번 만큼 반복한다.

- x 부터 시작해서 x 씩 증가하는 숫자 요소를 n개 가진 배열이 리턴된다.


다른 사람의 문제 풀이

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

- n 만큼의 길이를 가진 배열을 만든다.

- 배열의 요소들을 x로 채운다.

- 배열의 요소들을 하나씩 꺼내서 [(인덱스 + 1) * x] 을 해주어 만들어진 새로운 배열을 리턴한다.

- x에 1, 2, 3, 4... 를 곱하기 때문에 x부터 시작해 x씩 증가하는 숫자가 된다.

 

리턴할 배열의 길이가 명확한 경우 Array(n) 을 통해 배열을 만드는 것이 간단한 것 같다.

 

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

- 배열에 [x * 인덱스]를 넣는다.

- 인덱스는 1부터 시작하고 1씩 증가하기 때문에 배열의 요소로 x 의 배수들이 들어간다.

- for 문은 n 번 반복되기 때문에 숫자 요소를 n개 가진 배열이 리턴된다.

 

나의 풀이와 비슷하지만 인덱스를 1부터 시작해서 배수를 만드는 데에 사용하였다.

반복문을 사용할 때에는 최대한 인덱스를 활용해야겠다.

 

function solution(x, n) {
    return [...Array(n).keys()].map(v => (v + 1) * x);
}

- n 만큼의 길이를 가진 배열을 만든다.

- 배열의 key 값을 가져온다. key 값은 인덱스처럼 0부터 시작한다. (0, 1, 2, 3 ...)

- 배열의 key 값을 요소로 가진 새로운 배열을 만든다.

- 배열의 요소들을 하나씩 꺼내서 x 의 배수로 만들어 리턴한다.

 

map 함수의 인자인 인덱스를 사용하는 대신, keys() 로 만든 인덱스를 사용하였다.