ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #AIL_23.11.20 // Programmers_x만큼 간격이 있는 n개의 숫자
    AIL( Algorithm I Learned) 2023. 11. 20. 10:10

    ## AIL_x만큼 간격이 있는 n개의 숫자

    문제 설명
    함수 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]

    ## solution.JavaScript

    1. 문제의 접근 방식

    주어진 문제는 조건에 따라 정수 x와 자연수 n을 입력받고 x부터 시작해서 x씩 증가하는 숫자를 n개 지니는 리스트를 반환하는 함수를 만드는 것입니다. 


    2. 문제풀이

    function solution(x, n) {
        var answer = [];
        for(let i=0; i<n; i++) {
            answer[i] = (x*(i+1));
    }
        return answer;
    }
    /*
    테스트 1
    입력값 〉	2, 5
    기댓값 〉	[2, 4, 6, 8, 10]
    실행 결과 〉	테스트를 통과하였습니다.
    테스트 2
    입력값 〉	4, 3
    기댓값 〉	[4, 8, 12]
    실행 결과 〉	테스트를 통과하였습니다.
    테스트 3
    입력값 〉	-4, 2
    기댓값 〉	[-4, -8]
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    1. `function solution(x, n) { ... }` solution이라는 함수를 선언하고 x와 n을 매개변수로 받습니다. 

     

    2. `var answer = [];` 결과를 저장할 빈 배열 `answer`를 선언합니다. 

     

    3. `for (let i =0; i < n; i++) { ... }` 반복문을 사용하여 0부터 n 미만까지 반복합니다.  

     

    4. `answer[i] = (x * (i +1));` 각 인덱스 i마다 `answer[i]` 에는 x에 (i+1)을 곱한 값을 할당합니다.

    `(i+1)`을 설정해준 이유는 인덱스는 0부터 시작하기 때문에, 순차적으로 x의 배수를 만들기 위해서입니다. 

    `x * (i+1)`을 통해 x,2x,3x....의 순차적인 값들을 계산해서 배열에 저장합니다. 

     

    5. `return answer;` 를 통해 계산된 배열의 답을 반환합니다. 

     


    3. 다른사람의 문제풀이 및 접근방식 분석

    function solution(x, n) {
        return Array(n).fill(x).map((v, i) => (i + 1) * v)
    }
    /*
    테스트 1
    입력값 〉	2, 5
    기댓값 〉	[2, 4, 6, 8, 10]
    실행 결과 〉	테스트를 통과하였습니다.
    테스트 2
    입력값 〉	4, 3
    기댓값 〉	[4, 8, 12]
    실행 결과 〉	테스트를 통과하였습니다.
    테스트 3
    입력값 〉	-4, 2
    기댓값 〉	[-4, -8]
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    1. `Array(n)`을 사용하여 길이가 n인 배열을 생성합니다. 

     

    2. `fill(x)`를 사용하여 해당 배열을 x로 채웁니다. 배열에는 x가 n번 반복됩니다. 

     

    3. `map()`을 사용하여 배열의 각 요소에 접근합니다. 

     

    4. `(i+1)*v`를 통해 각 요소를 계산합니다. 여기서 `v`는 배열의 요소인 `x`를 나타내며, `(i+1)`은 1부터 시작하는 인덱스를 나타냅니다. 각 인덱스마다 `x`에 인덱스를 곱한 값이 반환됩니다. 코드 `map((v,i) => (i+1)*v)` 부분에서 `v`는 `fill(x)`로 채워진 배열의 각 요소를 나타냅니다. 

     

    => 추가 예시) 예를 들어 x가 2이고 n이 5인 경우

    1. `Array(n)`은 길이가 5인 빈 배열을 생성합니다.

    2. `fill(x)`는 해당 배열을 2로 채워 `[2,2,2,2,2]`를 생성합니다. 

    3. `map((v,i) => (i+1)*v)`는 각 요소 `v`가 2이고 `(i+1)`을 곱한 값을 반환합니다. 

    즉 `(1*2),(2*2),(3*2),(4*2),(5*2)`로 계산하여 `[2,4,6,8,10]`을 생성합니다. 

     

     

    반복문을 사용하지 않고 내장 함수들을 활용하여 리스트를 생성하므로 위에 코드는 효율적입니다. 

     


    # fill() 메서드란?

    `fill()` 메서드는 배열의 모든 요소를 정적인 값으로 채우는 메서드입니다. 이 메서드는 주어진 값으로 배열을 채우고, 채울 시작 위치와 끝 위치를 선택적으로 지정할 수 있습니다. 

    array.fill(value, start, end)

    ** `value` 배열을 채울 값입니다.

    ** `start`(선택적) 배열을 채우기 시작할 인덱스입니다. 기본값은 0입니다.

    ** `end`(선택적) 배열을 채우기를 끝낼 인덱스입니다. 기본값은 배열의 길이입니다. (이 인덱스 포함x)

     

    // 예시 1 - 기본적인 사용
    let arr = [1, 2, 3, 4, 5];
    arr.fill(0); // 모든 요소를 0으로 채움
    // 결과: [0, 0, 0, 0, 0]
    
    // 예시 2 - 특정 범위에 대한 사용
    let arr2 = [1, 2, 3, 4, 5];
    arr2.fill(0, 1, 3); // 인덱스 1부터 3 이전까지의 요소를 0으로 채움
    // 결과: [1, 0, 0, 4, 5]
    
    // 예시 3 - 길이가 5인 배열 생성 후 사용
    let newArr = new Array(5).fill('hello'); // 길이가 5이고 모든 요소를 'hello'로 채움
    // 결과: ['hello', 'hello', 'hello', 'hello', 'hello']

     

Designed by Tistory.