본문 바로가기
알고리즘/Programmers

[TIL] 2023.07.03 Programmers_배열의 원소만큼 추가하기

by heereal 2023. 7. 4.

배열의 원소만큼 추가하기

문제 설명

아무 원소도 들어있지 않은 빈 배열 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) {
    let answer = [];
    for (const num of arr) {
        answer = [...answer, ...Array(num).fill(num)]
    }
    return answer;
}

 

spread operator를 이용해서 문제를 풀었다. 원래는 concat() 메서드를 이용해서 풀고 싶었는데 이유가 무엇인지 for문 안에서 `answer.concat(Array(num).fill(num))`가 적용되지 않았다. 글을 쓰면서 다시 알아보니 concat() 메서드 기존배열을 변경하지 않고 추가된 새로운 배열을 반환한다는 특성 때문에 `answer = answer.concat(Array(num).fill(num))`로 적어야 맞는 거였다.

 

 

다른 사람의 풀이

function solution(arr) {
    return arr.reduce((list, num) => [...list, ...new Array(num).fill(num)], []);
}

for문이 아닌 reduce() 메서드를 이용해서도 풀 수 있다.

 

 

댓글