본문 바로가기
D.evelop [CS]/Algorithm

[Algorithm 020] JS - x만큼 간격이 있는 n개의 숫자 (Level 01)

by Danne 2021. 11. 7.

문제 출처 : 프로그래머스 prorammers  - x만큼 간격이 있는 n개의 숫자 (링크)

 

문제 설명

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다.

다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

 

제한사항

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

 


 

A.  내가 푼 답

function solution(x, n) {
  var answer = [];
  for (let i = 1 ; i <= n ; i++){
    answer.push(x * i)
  }
  return answer;
}

 

 

 

 

중간 과정 🤯

function solution(x, n) {
  var answer = [];
  for (i = x ; i <= x * n ; i){
    answer.push(i)
    i += x
  }
  return answer;
}

'x부터 시작한다'는 조건에 얽혀 for문의 선언을 let i = x 로 시작했었다.

그리고 n의 수 만큼돌게 하기 위해 조건식을 통해 x와 동일한 간격으로 증가 (x * n) 시키고 , i는 배열에 push 후에 값을 변환 시켜 주는 걸로.

하지만 이 x * n라는 조건 때문에, x가 음수일 경우 식이 돌지 않는다. 

x = -4, n = 2이면

-1 <= -8이라는 시작 부터 이미 조건에 맞지 않아 for 문 자체를 못 돌게됨.

 

 

 

 

B. 다른 사람이 푼 답

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

 

Array.prototype.fill() : 배열의 시작부터 끝 인덱스 까지 정적인 값 하나로 채움 (MDN명세)

 

arr.fill(value[, start[, end]])

 

예) solution(2, 5)

 

1. Array(n)이라는 배열을 fill메서드를 새용해 x라는 숫자로 채움. 

[ 2, 2, 2, 2, 2 ]

 

2.map함수를 사용해 각 값을 index만큼 곱해줌. 이때 index는 1부터 시작할 수 있도록 1을 더해줌

[ 
  (0 + 1) * 2,   // 2
  (1 + 1) * 2,   // 4
  (2 + 1) * 2,   // 6
  (3 + 1) * 2,   // 8
  (4 + 1) * 2    // 10
 ]
 
 //결과
 [ 2, 4, 6, 8, 10 ]

arr.map(callback(currentValue[, index[, array]])[, thisArg])

 

 

 

 

반응형

댓글