231120 TIL

chillakilla·2023년 11월 20일

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

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

입출력 예

솔루션 코드

<script>
function solution(x, n) {
  let answer = [];
  for (let i = 1; i <= n; i++) {
    answer.push(x * i);
  }
  return answer;
}
</script>
  • 문제의 도입부 부터 for 문의 냄새가 풀풀 풍긴다.
  • for 문을 사용할 수 있다면 reduce도 사용할 수 있을 텐데...아직 손끝에서 나오진 않는다.
  • 그러므로 일단은 답변을 빈 배열로 할당해둔 뒤, for 문으로 시작.
  • 나름 배수를 찾는 거니까 i=0 대신에 i=1로 할당. (숫자의 첫번째 배수는 숫자 그 자체부터라서)
  • let i = 1 부터 입력받은 n번과 작거나 같아질 때까지 반복, i는 점차적으로 증가.
  • push 메서드를 사용해 배열에 집어 넣는데, for 문을 돌고나온 i 에 입력 받은 x 배수 곱함.
  • 예로 x = 2, n = 5 일 때, i 에 2를 곱하면 2의 배수를 for 문으로 5번 돌려서 값을 반환.


Reduce 함수를 이용한 풀이

<script>
function solution(x, n) {
  return Array.from({ length: n }, (_, index) => (index + 1) * x);
}
</script>

Array.from() 정적 메서드는 순회 가능 또는 유사 배열 객체에서 얕게 복사된 새로운 Array 인스턴스를 생성합니다.

  • 예시 (mdn docs)
<script>
console.log(Array.from('foo'));
// Expected output: Array ["f", "o", "o"]

console.log(Array.from([1, 2, 3], (x) => x + x));
// Expected output: Array [2, 4, 6]
</script>
Array.from(arrayLike)
Array.from(arrayLike, mapFn)

arrayLike
배열로 변환할 순회 가능 또는 유사 배열 객체입니다.

mapFnOptional
배열의 모든 요소에 대해 호출할 함수입니다. 이 함수를 제공하면 배열에 추가할 모든 값이 이 함수를 통해 먼저 전달되고, mapFn의 반환 값이 대신 배열에 추가됩니다. 이 함수는 다음 인수를 사용하여 호출됩니다.

element
배열에서 처리 중인 현재 요소.
index
배열에서 처리 중인 현재 요소의 인덱스.

다른 사람의 풀이

<script>

function solution(x, n) {
    return Array(n).fill(x).map((v, i) => (i + 1) * v)
}
</script>
profile
꾸준하려 하는 쉽덕놈

0개의 댓글