function solution(x, n) {
var answer = [];
for(let i=1; i<=n; i++) {
answer.push(x*i)
}
return answer;
}
나는 이렇게 for문으로 풀었는데, 뭔가 더 좋은 풀이법이 있을 것 같아 다른사람의 풀이를 봤더니
function solution(x, n) {
return Array(n).fill(x).map((v, i) => (i+1) * v)
}
이렇게 짧은 코드로 나왔다.
array.fill.map을 체이닝해서 만든 로직인데 사실 fill이라는 배열 내장 메소드가 있는지도 처음 알았다.
fill()
arr.fill(value, start, end);
첫번째 인자인 value만 필수값이고 시작인덱스와 끝인덱스는 옵셔널이다.
map()
arr.map(callback(currentValue, index, array));
매개변수로 콜백함수를 받는데 3가지 인자를 가질 수 있다. index, array는 선택사항이다.
[1,2,3].map((v, i) => (v + i));
// 실행 결과 : [1, 3, 5]
위 코드에서 v는 배열의 각각 요소인 1,2,3을 가리키게 된다. i는 index를 나타내며 0, 1, 2가 될 것이다.
Array(n).fill(x)는 길이가 n이고 모든 요소가 x인 배열을 생성한다. 그 후 map() 함수를 사용, 배열의 각 요소를 수정한다.
map() 함수의 인자로 전달된 콜백함수는 배열의 각 요소에 대해 실행되며 현재 요소의 값을 나타내는 v와 인덱스 i를 인자로 받는다.
그리고 (i+1) * v 값은 배수를 나타낸다. i+1인 이유는 배열의 index가 0부터 시작하기 때문이다.
간결하고 좋아서 열심히 정리했지만 퍼포먼스는 for문 쪽이 더 좋다고 한다.
'내용 복습 > 알고리즘' 카테고리의 다른 글
[JS] 프로그래머스 - 부족한 금액 계산하기 (0) | 2024.02.05 |
---|---|
프로그래머스 1단계 내적 - arr.reduce (0) | 2024.01.31 |
프로그래머스 1단계 - 나누어 떨어지는 숫자 배열 (0) | 2024.01.22 |
프로그래머스 0단계 - 각도기 (1) | 2024.01.04 |
Math 내장 객체 (0) | 2024.01.03 |