programmers/level1

[level1] - x만큼 간격이 있는 n개의 숫자도움말

태기의삶 2020. 7. 19. 12:58

 

 

 

코딩테스트 연습 - x만큼 간격이 있는 n개의 숫자

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

programmers.co.kr

문제 설명 :

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

입력 및 출력

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

 

접근 방법 :

우선 n개를 지닌 리스트를 만들어야 하기 때문에, 배열에 담을 수 있는 변수 하나를 선언하고, for문으로 배열에 하나씩 push()를 하는데 그 값으로 x부터 x씩 증가해야 하기 때문에 i에 x를 곱하여 추가하는 로직으로 접근해보았다.

 

내가 짠 코드 :

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

로직은 정말 단순하다.

더 좋은 방법이 궁금해서 다른 사람 풀이를 보았다.

 

다른 사람이 짠 인상 깊은 코드 :

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

엄청 간단하게 한 줄로 끝내셨다.

엄청난 현타가 밀려왔지만..😂

직접 해석을 한다면, n을 Array()를 통해서 배열의 크기가 5인 모든 항목에 undefined가 들어있는 배열을 만들고, 

Array()는 그냥 배열로 만들어주는 메서드인 것 같다.

fill(x) 메서드를 통해서 모든 배열 안의 수를 x값으로 만들고, map()을 통해서 x에 인덱스를 곱한 수를 모두 반환하면 똑같이 x부터 x씩 증가하는 수가 반환되는 것을 볼 수 있다.

fill() 메서드 참고!

 

Array.prototype.fill()

fill() 메서드는 배열의 시작 인덱스부터 끝 인덱스의 이전까지 정적인 값 하나로 채웁니다.

developer.mozilla.org