JavaScript/알고리즘

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

hihiha2 2023. 8. 25. 10:51

문제 설명

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

 

 

 

🙋‍♀️ 내 생각

최종적으로 반환하는 answer이 배열이기때문에 빈배열을 먼저 만들고, 그 안에 push로 값을 담아야겠다고 생각했다.

 

x씩 증가하는 값을 반복하므로 for반복문을 사용했다.

 

 

 

 

✅ 내 코드

const solution = (x,n) => {
    let arr =[]

    for(i=x; arr.length<n; i+=x){
            arr.push(i)
        }
    
    return arr
    
    }

우선 arr를 만들고 빈배열을 할당한다.

 

for문을 통해서 반복문을 만든다. 

 

-반복문의 범위

x부터 시작되므로 i=x시작점을 잡는다.

어디까지 반복할지 끝지점은 arr.length= n일때까지 반복하므로 arr.length < n으로 잡는다.

 

-반복될때마다의 조건

for를 한번 돌때마다 x씩 커져야하므로 i+=x 로 조건을 만든다.

 

- 반복문을 돌면서 반복할 행위

미리 선언해둔 arr에 i의 값을 담는 행위를 for문을 도는 동안 반복한다.

이렇게 담는 생위를 하기 위해서 push()를 사용한다.

 

arr.length>n일때까지만 i에 x를 더해가면서 arr에 i를 push하고 범위를 벗어나면 바로 for문을 빠져나온다.

 

return arr를 통해서 arr를 리턴한다.

 

 

 

💻  다른사람 코드중에 배울 것 

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

 

내가 x씩 더하는 방식으로 푼것과 달리, 이 코드는 x를 곱하는 방식을 이용했다.

예를 들어 입출력예 1번을 보면 x=2이기 때문에 2씩 더해간다.

그런데 다른 방법을 생각해보면, (인덱스+1)*22를 곱해도 같은 결과가 나온다.

 

 

우선, Array(n)으로 n개의 길이를 갖는 배열을 만든다.

(위에 내가 만든 코드에서 arr.length = n이라고 만든것과 동일한 효과이다.)

 

fill(x)를 통해서 그 배열안의 값들을 모두 x로 만든다.

(이렇게 x로 만든 이유는 시작점이 x이기 때문이다.

위에 내가 만든 코드에서 i=x로 시작점을 지정해준 것과 동일하다.)

 

그 다음에는 map을 통해서 반복할 행위를 지정한다.

map((v, i) => (i + 1) * v)

배열의 모든 요소를 돌면서 x를 곱하는 행위를 반복하는데, 1부터 곱해야하는데 인덱스는 0부터 시작되므로 i+1로 만들고 나서 x를 곱하게 한다.

이렇게 하면 각 요소마다 x를 곱하면서 배열을 채우고 값을 리턴할 것이다.

 

 

 

 

🙋‍♀️ 내 생각

for문을 사용한 코드도 복잡하지는 않지만 리액트로 코드를 짤때는 map을 사용할 일이 많으므로 map을 통해서 만드는 법도 익숙해져야할 것 같다. 그래서 for문을 통해서 문제를 풀었어도 같은 코드를 map으로는 어떻게 풀수있을까를 한번 더 생각해보는 것도 생각해보는 연습을 해야겠다.