<문제 설명>
아무 원소도 들어있지 않은 빈 배열 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을 여러 번 더하는 방법을 생각했고,
그제서야 금방 풀렸다.
문제 해결을 위해서는 내 시야가 정답이 아닐 수 있음을 늘 자각해야겠다.
'개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스 | javascript] 무작위로 K개의 수 뽑기 (0) | 2023.09.08 |
---|---|
[프로그래머스 | JavaScript] 수열과 구간 쿼리 3 (0) | 2023.07.04 |
[프로그래머스 | JavaScript] 등차수열의 특정한 항만 더하기 (0) | 2023.06.29 |
[프로그래머스 | MySQL] 최솟값 구하기 (0) | 2023.06.05 |
[프로그래머스 | JavaScript] 카드 뭉치 (0) | 2023.05.31 |