한 걸음씩
[프로그래머스][JS] 빈 배열에 추가, 삭제하기 ✅ 본문
https://school.programmers.co.kr/learn/courses/30/lessons/181860
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
function solution(arr, flag) {
var answer = [];
for (let i = 0; i < flag.length; i++){
if (flag[i] === true){
answer.push(...Array(arr[i]).fill(arr[i]))
answer.push(...Array(arr[i]).fill(arr[i]))
}else{ // false
answer.splice(-arr[i]) // 마지막 arr[i]개의 원소 제거
}
}
return answer;
}
[상세 설명]
answer.push(...Array(arr[i]).fill(arr[i]))
answer.push(...Array(arr[i]).fill(arr[i]))
// push를 두 번을 했는데 아래처럼 수정할 수 있다.
answer.push(...Array(arr[i] * 2).fill(arr[i]))
// Array(arr[i] * 2) 배열의 길이를 두 배로 늘려서 push를 두 번하지 않도록 하기
true일 때, push를 두 번 하는 이유는 문제에서 arr[i] * 2번 추가하라고 했기 때문이다.
Array(arr[i]).fill(arr[i])
arr[i] = 3일 때, Array(3).fill(3) → 배열의 길이가 3이고 모든 요소를 3으로 채워라 : [3, 3, 3]
그런데 초기에 answer이라는 배열을 생성했고 이 배열에 push 하면서 false가 나왔을 때 원소를 빼야 하니까 위의 코드에서 스프레드를 해줘야 이차원 배열이 안된다. 스프레드를 하지 않고 push를 하면 [[3, 3, 3]]의 결과를 얻게 된다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Array
Array() 생성자 - JavaScript | MDN
Array() 생성자는 새로운 Array 객체를 생성할 때 사용합니다.
developer.mozilla.org
answer.splice(-arr[i]) // 마지막 arr[i]개의 원소 제거
arr[i]에서 음수를 붙여준 이유는 마지막에서 arr[i]개를 제거해야 하기 때문이다.
splice는 해당 인덱스를 포함해서 이후의 모든 요소를 제거한다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
Array.prototype.splice() - JavaScript | MDN
splice() 메서드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경합니다.
developer.mozilla.org
리뷰
배열을 생성하는 방법은 써본 적이 없었는데 이 문제를 통해서 새롭게 배웠다.
splice 메서드는 꽤 자주 사용하는데 매번 문서를 찾아보는 것 같다...
'Programmers' 카테고리의 다른 글
[프로그래머스][JS] 배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2023.06.10 |
---|---|
[프로그래머스][JS] 컨트롤 제트 (0) | 2023.06.10 |
[프로그래머스][JS] 문자열이 몇 번 등장하는지 세기 (0) | 2023.06.09 |
[프로그래머스][JS] 한 번만 등장한 문자 ✅ (0) | 2023.06.08 |
[프로그래머스][JS] 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 (0) | 2023.06.08 |