본문 바로가기
코딩 문제/프로그래머스 [ JavaScript ]

[ 프로그래머스 / Javascript ] x만큼 간격이 있는 n개의 숫자

by CODESIGN 2024. 10. 16.

https://school.programmers.co.kr/learn/courses/30/lessons/12954

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제 설명


함수 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]

 

 

나의 풀이


주어진 x를 시작으로 x의 배수를 구하며, 이를 길이 n이 될 때까지 answer 배열에 추가하는 방식입니다. 최종적으로 x의 배수로 이루어진 길이 n의 배열이 반환됩니다.

function solution(x, n) {
    var answer = [];
    for (let i = x;  answer.length < n; i+=x ) { 
    	// let i = x : 반복문을 사용하여 i를 x로 초기화합니다.
   	// answer.length < n : 반복 조건은 answer 배열의 길이가 n보다 작을 때까지 계속됩니다.
   	// i+=x : i는 매 반복마다 x만큼 증가합니다.
        answer.push(i) // i의 값을 answer 배열에 추가합니다.
    }
    return answer; // 최종적으로 answer 배열을 반환합니다.
}

 

 

 

다른 풀이


주어진 x와 n에 대해, 길이가 n인 배열을 생성하고, 모든 요소를 x로 채웁니다.
그런 다음, 각 요소의 인덱스를 기준으로 1부터 n까지의 정수를 곱하여 새로운 배열을 만듭니다.
최종적으로 x의 배수로 이루어진 배열을 반환하게 됩니다.

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

 


Array(n)

길이가 n인 배열을 생성합니다. 이 배열은 초기화되지 않은 빈 슬롯으로 채워져 있습니다.

 

fill(x)

이 빈 배열의 모든 슬롯을 값 x로 채웁니다. 결과적으로 길이가 n인 배열이 되고, 각 요소는 모두 x로 채워지게 됩니다.

예를 들어, x = 3, n = 5라고 하면:

Array(5).fill(3) // [3, 3, 3, 3, 3]



.map((v, i) => (i + 1) * v)
.map(): 배열의 각 요소에 대해 주어진 함수를 호출하고, 그 결과로 새로운 배열을 만듭니다.
(v, i) => (i + 1) * v: 
   - `v`는 현재 요소의 값(여기서는 `x`), 
   - `i`는 현재 요소의 인덱스입니다.
   - `(i + 1) * v`는 인덱스에 1을 더한 값에 `v`를 곱한 결과를 반환합니다.

위의 예시를 다시 사용하면:

[3, 3, 3, 3, 3].map((v, i) => (i + 1) * v)
// (0 + 1) * 3 = 3
// (1 + 1) * 3 = 6
// (2 + 1) * 3 = 9
// (3 + 1) * 3 = 12
// (4 + 1) * 3 = 15

// 결과: [3, 6, 9, 12, 15]



 

 

댓글