배열의 원소만큼 추가하기
배열의 원소만큼 추가하기
흔치 않은 flat() 의 사용 기회라서 블로그에 올린다.
문제
문제 설명
아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 양의 정수 배열 arr가 매개변수로 주어질 때, arr의 앞에서부터 차례대로 원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를 return 하는 solution 함수를 작성해 주세요.
입출력 예
arr | result |
---|---|
[5, 1, 4] | [5, 5, 5, 5, 5, 1, 4, 4, 4, 4] |
[6, 6] | [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6] |
[1] | [1] |
풀이
function solution(arr) {
return arr.map((a) => Array(a).fill(a)).flat();
}
풀이 설명
arr의 모든 원소에 대해
Array(a).fill(a)
는 길이가 a 만큼인 배열을 만들고 그 값을 a로 채운다.
[5, 1, 4]
를 처리하면 이렇게 된다.
[[5, 5, 5, 5, 5], [1], [4, 4, 4, 4]]
다음, Array.prototype.flat()을 사용하여 내부 배열을 전부 이어붙인다.(평탄화한다)
flat은 딱 한 레벨만 평탄화한다. 예를 들어 [1, [2, 3], [4, [5, 6]]].flat()
의 결과는 [ 1, 2, 3, 4, [ 5, 6 ] ]
이다. 이런 것도 모조리 다 전개하려면, 직접 하지 말고 lodash라이브러리의 flatDeep을 사용하는 게 좋다. 어쨌든 기본 flat()
만으로도 이 문제를 풀기에는 충분하다.
다른 사람들의 풀이가 더 기발하니, 문제를 풀고 나서(꼭 스스로 풀길 바랍니다) 다른 사람들의 풀이도 살펴보는 것을 권한다.
댓글남기기