개발/알고리즘(코딩테스트)

프로그래머스, 자바스크립트) 빈 배열에 추가, 삭제하기

빔네모 2024. 1. 11. 21:53

문제

https://school.programmers.co.kr/learn/courses/30/lessons/181860

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

조건을 정리해보자

1. flag[i] 값이 true면 arr[i]을 arr[i]*2번 추가

2. flag[i] 값이 false라면 마지막 arr[i]개의 원소를 제거

 

arr 배열을 돌면서 플래그 값을 검사해 플래그 값이 true인 경우에는, arr[i]의 두배한 수만큼 arr[i]를 추가해준다.

반대로 false인 경우에는 splice를 이용해 잘라내어준다. (slice는 원본을 그대로 유지한채 새 배열을 반환하기때매 사용 불가)

 

합치는 방법을 고민했는데,, fill을 알고있다면 간단히 해결할 수 있는 문제였다.

function solution(arr, flag) {
  const X = [];
  arr.forEach((x, i) => {
    flag[i] ? X.push(...Array(x * 2).fill(x)) : X.splice(-x);
  });
  return X;
}

 

 

다른 풀이

reduce를 이용한 방법. true인 경우 조건에 맞게 추가하고, false인 경우 마지막 배열에서 num만큼 제거한 값을 새로 지정한다.

function solution(arr, flag) {
  return arr.reduce(
    (prev, num, i) =>
      flag[i]
        ? [...prev, ...new Array(num * 2).fill(num)]
        : prev.slice(0, -num),
    []
  );
}