한 걸음씩
[프로그래머스][JS] 수열과 구간 쿼리 1 ✅ 본문
https://school.programmers.co.kr/learn/courses/30/lessons/181883
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
function solution(arr, queries) {
let result = arr.slice() // 깊은 복사
for (let i = 0; i < queries.length; i++){
const [s, e] = queries[i] // 비구조화 할당
for (let j = s; j <= e; j++){
result[j] += 1 // s부터 e까지 +1
}
// console.log(result)
}
return result;
}
// [ 1, 2, 2, 3, 4 ]
// [ 1, 3, 3, 3, 4 ]
// [ 1, 3, 4, 4, 4 ]
[Shallow Copy, Deep Copy]
let result = arr이 아니라
let result = arr.slice() 이렇게 하는 이유는 깊은 복사와 얕은 복사의 차이가 있기 때문이다
배열을 새 변수에 그대로 할당하면 얕은 복사로 원래 배열과 같은 참조값을 가지기 때문에 조작 시 문제가 생길 수 있다
반면에, slice 메서드로 복사를 하면 깊은 복사가 되는데, 원래 배열과 참조값이 다른 아예 새로운 배열이 생성이 된다.
[비구조화 할당]
const [s, e] = queries [i] 이런 식으로 할당하는 것은 비구조화 할당이라고 한다.
queries [i]는 i번째 쿼리를 뜻하는데 2차원 배열의 요소를 하나씩 꺼내준다. [0, 1], [1, 2], [2, 3]
리뷰
손으로 문제를 풀 때는 흐름이 그려지는데 이걸 어떻게 코드로 풀어내야 할지 모르겠어서 정답 코드부터 봤는데
얕은 복사, 깊은 복사, 비구조화 할당이라는 것에 대해 알았다.
얕은 복사와 깊은 복사의 차이에 대해서 정확히 몰랐는데 이 문제를 풀면서 배웠다
'Programmers' 카테고리의 다른 글
[프로그래머스][JS] 수박수박수박수박수박수? (0) | 2023.06.07 |
---|---|
[프로그래머스][JS] 수열과 구간 쿼리 3 (1) | 2023.06.06 |
[프로그래머스][JS] 수 조작하기 2 (0) | 2023.06.05 |
[프로그래머스][JS] 가까운 수 ✅ (0) | 2023.06.05 |
[프로그래머스][JS] 간단한 논리 연산 (0) | 2023.06.04 |