개발/코딩테스트

[프로그래머스 | JavaScript] 빈 배열에 추가, 삭제하기

prpn97 2023. 7. 3. 16:09

<문제 설명>

아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 길이가 같은 정수 배열 arr과 boolean 배열 flag가 매개변수로 주어질 때, flag를 차례대로 순회하며 flag[i]가 true라면 X의 뒤에 arr[i]를 arr[i] × 2 번 추가하고, flag[i]가 false라면 X에서 마지막 arr[i]개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요.

 

 

<입출력>

arr flag result
[3, 2, 4, 1, 3] [true, false, true, false, false] [3, 3, 3, 3, 4, 4, 4, 4]

 

<문제 풀이>

function solution(arr, flag) {
let answer = []
for(let i = 0; i < arr.length; i++){
    if(flag[i]){
        answer.push(...Array(arr[i] * 2).fill(arr[i]));
    }
    else {
        answer.splice(-arr[i])
    }
}
return answer
}

1. flag가 true, false일 경우로 if문을 나눈다.

2. flag가 true일 경우, 빈 배열에 arr[i]를 arr[i]*2개 담는다. 

테스트케이스인 3이 true일 때, 3을 6번 담아서 3,3,3,3,3,3을 넣는 것이다. 

 

먼저 push 안에서 arr[i]*2개의 요소가 있는 새 배열을 만들어 주었다. 

그 요소들은 각각 arr[i]로 채운다.

그리고 배열 안에 다른 배열이 들어가는 것이므로 안에 있는 요소는 배열에서 꺼내주었다. 

 

3. flag가 false일 경우 배열의 맨 마지막부터 arr[i]개만큼 요소를 제거한다.

 

 

 

<코멘트>

솔직히 쉬운 문제라서 안올릴까 하다가,, 바로 풀리지는 않고 머릿속에 이미 그려져 있는데도

답이 금방 나오지는 않았다보니 체크할 겸 쓰게 되었다. 

배열에 push를 6번 할 방법이 먼저 떠오르지 않았다. 

문자열로 answer+=String(arr[i]).repeat(arr[i]*2) 이런식으로 더해보기도 했는데,

문자열이 더해진 상태에서 빼고 다시 더하고, 빼는 작업이 쉽지는 않았다.

 

다시 근원으로 돌아가서 빈 배열에서 3을 여러 번 더하는 방법을 생각했고,

그제서야 금방 풀렸다. 

문제 해결을 위해서는 내 시야가 정답이 아닐 수 있음을 늘 자각해야겠다.

728x90