[Javascript] LV.1 x만큼 간격이 있는 n개의 숫자

은비·2023년 9월 27일
1

Programmers_CodingTest

목록 보기
48/72
post-thumbnail

문제 설명

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

제한 조건

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

입출력 예

xnanswer
25[2,4,6,8,10]
43[4,8,12]
-42[-4, -8]

✍ SOLUTION1

const solution = (x, n) => {
    const arr = [x];
    let a = x;
    for(let i = 1; i < n; i+=1) {
        a += x
        arr.push(a)
    }
    return arr;
}

/*
내가 처음 작성한 코드이다. 
더 간단하게 작성할 수 있는 방법이 있을텐데 생각이 나지 않아서 for문으로 작성해보았다..

1. 마지막에 return 되는 배열에는 항상 인덱스 0에 x(자기자신)은 가지고 있으니
for 루프를 돌 필요가 없다고 생각하여 [x]를 담고 있는 arr을 먼저 만들어주었다.
2. 이때 for루프 초기값 i는 1로 정해두고 조건식은 i가 n까지 1씩 증가하는 for 루프를 만들었다.
3. x부터 x씩 증가하도록 만들기 위해서 먼저, for문 밖에 변수 a를 만든 후 x값을 주었다. 
for 루프가 한번돌때마다 변수 a에 x만큼 증가시키도록 해주었고 push 메서드를 사용하여 
arr에 a 값을 넣어주었다.
4. 결과값 arr을 return해준다.

*/

✍ SOLUTION2

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

/*
다른 분의 풀이를 보다가 너무 간단하게 풀 수 있는 방법을 보고... 공부할겸 작성해보았다. 

1. n개를 가진 빈 Array를 만든 후 fill 메서드를 사용하여 x로 채워주었다.
2. map을 사용하여 각 요소에 대해 새로운 값을 만들어준다. 
(v, i) v는 현재 요소, i는 현재 요소의 인덱스이다. 
(i + 1) * v는 현재 인덱스에 1을 더한 값에 v를 곱한 결과이다.
3. 이 함수는 주어진 숫자 x와 반복 횟수 n에 따라 [x, 2 * x, 3 * x, ..., n * x]와 같은 숫자들로 
구성된 배열을 반환한다.
*/

✍ SOLUTION3

function solution(x, n) {
    return (n === 1) ? [x] : [ ...solution(x, n - 1), (x * n)];
}

/* 
이건 재귀로 작성한 방법인데 기본적인 종료조건이 없어서 조금 아쉬운 코드이긴하다. 
그래도 정상적으로 출력이 되므로 작성해본다.

1. n이 1인지 확인하는 조건이다.
2. 만약 n이 1이라면, [x] 배열을 반환한다. 
3. 그렇지 않으면, [...solution(x, n - 1), (x * n)] 코드가 실행된다.
4. solution(x, n - 1)은 재귀적으로 자기 자신을 호출하고 있다. 
이것은 반복 횟수를 하나씩 줄여가며 이전 요소들로 구성된 배열을 생성하는 역할을 한다.
5. (x * n)은 현재 반복 횟수에 해당하는 값을 계산하여 배열에 추가한다.
*/

출처 : 프로그래머스 스쿨 | 코딩테스트 연습

0개의 댓글