1 분 소요

배열의 원소만큼 추가하기

문제 보기

흔치 않은 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()만으로도 이 문제를 풀기에는 충분하다.

다른 사람들의 풀이가 더 기발하니, 문제를 풀고 나서(꼭 스스로 풀길 바랍니다) 다른 사람들의 풀이도 살펴보는 것을 권한다.

댓글남기기