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

2022. 10. 5. 11:10기록/Programmers

    목차

문제 설명

함수 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() 로 만든 인덱스를 사용하였다.