[JS] 빈 배열에 추가, 삭제하기

Yongmin Park·2024년 6월 16일
0

JS-Programmers

목록 보기
9/14

프로그래머스 문제 링크


문제 풀이 생각 회로

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를 사용해 문제를 해결한 코드를 적어 놓겠다. 필자가 하고자 했던 방식이다.

  • slice는 - 연산이 가능해 다음 부터는 - 연산을 통해서 자르면 될 것 같다.
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
}
profile
기록으로 기적을

0개의 댓글