재미있었던 문제를 리뷰해보려한다
모든 문제의(?) 시작
이전 팀원분이 같이 문제를 풀어보자고 하심
나는 이미 푼 문제로 간단하게 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() 메서드는 모든 하위 배열 요소를 지정한 깊이까지 재귀적으로 이어붙인 새로운 배열을 생성합니다.
진짜_최종__최종본.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()메서드는 함께 연결되어 호출된 문자열의 지정된 복사본 수를 포함하는 새 문자열을 구성하고 반환합니다
넌 못 지나간다