"배열의 원소만큼 추가하기"를 즐겁게 풀어봅시다

Jean·2023년 6월 12일
0
post-custom-banner

배열의 원소만큼 추가하기

재미있었던 문제를 리뷰해보려한다

모든 문제의(?) 시작

무난하게 for로 시작

이전 팀원분이 같이 문제를 풀어보자고 하심
나는 이미 푼 문제로 간단하게 forEach를 사용해서 해결했다

function solution(arr) {
    let result=[]
    arr.forEach(data=>{
        for(let i=0;i<data;i++){
            result.push(data)
        }
    })
    return result
}

더블 맵!!

팀원분은 map을 두개 이용해서 푸셨다

function solution(arr) {
    return arr.map((x) => Array(x).fill(x)).join().split(',').map((x) => Number(x));
}

(한줄코딩을 사랑하시는듯)

map 두개를 쓰니
[[5,5,5,5,5],[1],[4,4,4,4]]
이런 결과가 나와서 join과 split으로 1차원 배열을 만드려 했으나 문자열이 나왔다

스프레드 파워!!!

중첩괄호를 풀기위해 스프레드를 쓰려했으나...

return arr.map((x) => ...Array(x).fill(x));
                          ^^^
SyntaxError: Unexpected token ‘...

스프레드는 [],{}없이는 쓸 수 없다..

그렇다고 괄호를 넣자니 다시 2차원 배열이 나오는...

리듀스의 맛을 째끔만 봐라

아 이거 괄호 여는 법 없을리가 없다! 하면서 검색해온
리듀스~
(특징: 맨날 검색하고, 음 그렇군 완벽히 이해했어! 하고 또 까먹고 검색하고....)

function solution(arr) {
    return arr.map((x) => Array(x).fill(x)).reduce((a, b) => a.concat(b));
}

concat은 배열끼리 합쳐준다

이렇게 평화를 찾은 듯 했으나...

그런데 말입니다


아~ 이거 분명히 자바스크립트 함수에 배열 풀어버리는 거 있을 것 같은데..??
해서 찾아봤고, 나왔다

Flat()

flat() 메서드는 모든 하위 배열 요소를 지정한 깊이까지 재귀적으로 이어붙인 새로운 배열을 생성합니다.

진짜_최종__최종본.js ⬇️

function solution(arr) {
    return arr.map((x) => Array(x).fill(x)).flat()
}

원본 ⬇️

function solution(arr) {
    return arr.map((x) => Array(x).fill(x)).join().split(',').map((x) => Number(x));
}


짜릿해

번외

이거 혹시 repeat는 어떨까...?

function solution(arr) {
  return arr.map((x) => Array.from(x.repeat(x)));
}

String.prototype.repeat()

이 repeat()메서드는 함께 연결되어 호출된 문자열의 지정된 복사본 수를 포함하는 새 문자열을 구성하고 반환합니다


넌 못 지나간다

문자열이 아닌 자는 통과할 수 없었다

profile
햇내기 개발자 지망생
post-custom-banner

0개의 댓글