문제 설명
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
x | n | answer |
---|---|---|
2 | 5 | [2,4,6,8,10] |
4 | 3 | [4,8,12] |
-4 | 2 | [-4, -8] |
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해준다.
*/
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]와 같은 숫자들로
구성된 배열을 반환한다.
*/
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)은 현재 반복 횟수에 해당하는 값을 계산하여 배열에 추가한다.
*/