js 누산기 최강 reduce를 사용해서 해결하고자 했다. flag를 순회하면서 cur(현재값)이 참일 떄 acc 에 Array를 생성하고 fill로 해당값을 채워 주거나 cur이 거짓일 때는 slice로 값을 지워 주면 될 것이라 생각했다.
하지만 생각대로 잘 동작하지 않았다. 다음은 작성했던 코드 전문이다.
let answer = flag.reduce((acc, cur, i) => cur ? acc + new Array(arr[i] * 2).fill(arr[i]) : acc.slice(0, acc.length - arr[i] - 1), [])
}
해당 코드를 진행하면 원하는 배열이 아니라 문자열이 남게 되는 것을 확인할 수 있다.
나중에 검색을 통해 알게 되었지만 해당 값을 스프레드 연산을 통해서 값을 누산해주어야 한다.
reduce 잘 사용하기 참으로 어렵다. 하지만 점점 감을 익혀가는 것 같다.
하단에는 reduce를 사용해 문제를 해결한 코드를 적어 놓겠다. 필자가 하고자 했던 방식이다.
-
연산이 가능해 다음 부터는 -
연산을 통해서 자르면 될 것 같다.function solution(arr, flag) {
return arr.reduce(
(prev, num, i) => (flag[i] ? [...prev, ...new Array(num * 2).fill(num)] : prev.slice(0, -num)),
[],
);
}
function solution(arr, flag) {
// let answer = flag.reduce((acc, cur, i) => cur ? acc + new Array(arr[i] * 2).fill(arr[i]) : acc.slice(0, acc.length - arr[i] - 1), [])
let = answer = []
for (let i = 0; i < flag.length; i++) {
if (flag[i]) {
answer = [...answer, ...new Array(arr[i] * 2).fill(arr[i])]
} else {
answer = answer.slice(0, answer.length - arr[i])
}
}
return answer
}