한 걸음씩

[프로그래머스][JS] 수열과 구간 쿼리 1 ✅ 본문

Programmers

[프로그래머스][JS] 수열과 구간 쿼리 1 ✅

winter17 2023. 6. 6. 11:50

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]

 

 


리뷰

손으로 문제를 풀 때는 흐름이 그려지는데 이걸 어떻게 코드로 풀어내야 할지 모르겠어서 정답 코드부터 봤는데

얕은 복사, 깊은 복사, 비구조화 할당이라는 것에 대해 알았다. 

얕은 복사와 깊은 복사의 차이에 대해서 정확히 몰랐는데 이 문제를 풀면서 배웠다