본문 바로가기

코테/프로그래머스

[코딩 기초 트레이닝] 배열의 원소만큼 추가하기

728x90

[코딩 기초 트레이닝] 배열의 원소만큼 추가하기

문제 링크

구분

코딩 테스트 연습 > 코딩 기초 트레이닝

풀이 요약

배열의 원소 수만큼 원소 개수를 늘리는 문제

나의 풀이

function solution(arr) {
    let answer = [];
    for (let x of arr) {
        for(let i=0; i<x; i++){
            answer.push(x)
        }
    }
    return answer;
}

이중 for문을 사용해서 x의 수만큼 원소개수를 늘리는 두번째 for문이 실행되게 코드를 짰습니다.

예를 들어, arr=[2, 3] 일때,

2에 대해 내부 for문이 두 번 실행되어 2,2 가 되고 3에 대해 내부 for문이 세 번 실행되어 3,3,3 이 됩니다.

배운점

function solution(arr) {
    return arr.flatMap((n) => Array(n).fill(n));
}
  • 이번 문제 풀이를 통해 flatMap 메서드를 알게되었습니다. ( 다른 분이 풀이하신 답안인데 더 간결하고 가독성이 좋습니다 )
  • flat은 평면화한다는 뜻으로 이중 구조를 가진 데이터를 단일 수준으로 단순화하여 펼친다는 뜻입니다.
  • flatMap 메서드는 콜백함수를 실행한 결과값이 복잡한 데이터 구조를 가지고 있으면, 이를 단순화하고 처리하기 쉬운 일차원 배열 형태로 변경시켜 최종 결과값을 리턴합니다.

map 과 flatMap 의 차이

const arr = [1, 2, 3];

const mapArr = arr.map((num) => [num, num * 2]);
console.log(mapArr); // [[1, 2], [2, 4], [3, 6]]

const flatMapArr = arr.flatMap((num) => [num, num * 2]);
console.log(flatMapArr); // [1, 2, 2, 4, 3, 6]

두 함수는 사용법이 같고, 같은 원본 배열을 복사하고 콜백 함수 또한 동일하게 작성되어있습니다.
두 함수의 차이는 map 메서드는 콜백함수의 결과값이 그대로 리턴되는 반면, flatMap 메서드는 단일구조 (일차원 배열) 혹은 객체를 리턴하는 차이가 있습니다.

728x90