문제
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 arr[i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 1,000
- 0 ≤ arr의 원소 ≤ 1,000,000
- 1 ≤ queries의 길이 ≤ 1,000
- 0 ≤ s ≤ e < arr의 길이
고민한 점 & 해결 과정
먼저 queries의 각 원소가 [s, e] 형태의 구간 정보이기 때문에 구조 분해 할당으로 s와 e로 나누어서 정리했습니다.
그 후, for문을 돌면서 arr의 값에 +1를 적용해주면 되지 않을까 하고 논리 부분을 적었습니다.
function solution(arr, queries) {
const [s, e] = queries
for (i = s; i <= e; arr[(i += 1)]) {
return arr;
}
}
그러나 해당 접근은 치명적 오류를 몇 가지 포함하고 있었습니다.
- queries는 이중 배열이기 때문에 const [s, e] = queries 형식으로 구조 분해 할당하게 되면 queries의 첫 두 '쿼리'를 뽑아두는 꼴이 되고 맙니다.
- for문 내의 증감 로직이 잘못되었습니다. i를 증가시키는 로직과 arr[i]를 증가시키는 로직을 한 번에 수행 하려다 이도저도 아닌 로직이 되어버렸습니다.
- return문을 for문 안에 넣어서 for문의 반복 처리 자체가 성립되지 않고 있었습니다.
이중 배열 처리를 어떻게 해야할지 감이 잡히지 않아 구글링을 해본 결과, 이중 for문을 사용하여 바깥 for문에서 queries의 query를 처리하고 안쪽 for문으로 i값의 증감을 다루고 arr값을 처리하는 방법을 알아냈습니다.
이중 for문
function solution(arr, queries) {
for (const [s, e] of queries) {
for (let i = s; i <=e; i++) {
arr[i] +=1;
}
}
return arr;
}
최종 결과 및 느낀 점
이중 배열을 다루는 것이 익숙하지 않았는데, 잘못된 방향의 구조 분해 할당을 하면 배열 자체에 잘못 접근할 수도 있다는 것을 깨달았습니다.
로직을 한번에 처리할 수 없다면 각각 역할을 나눈 구조로 만드는 것도 방법이란 것을 깨달았습니다.
'코딩 테스트 공부' 카테고리의 다른 글
| 프로그래머스 자바스크립 코딩 기초 트레이닝 - A 강조하기 (대소문자 변환 메서드, replace(), replaceAll() 메서드, 정규 표현식) (0) | 2026.01.07 |
|---|---|
| 프로그래머스 자바스크립 코딩 기초 트레이닝 - 조건에 맞게 수열 변환하기 1 (&& 연산자, map()메서드) (0) | 2026.01.02 |
| 프로그래머스 자바스크립 코딩 기초 트레이닝 - 가까운 1 찾기 & 첫 번째로 나오는 음수 (0) | 2025.12.26 |
| 프로그래머스 자바스크립 코딩 기초 트레이닝 - 접미사 배열 (0) | 2025.12.17 |
| 프로그래머스 자바스크립트 코딩 기초 트레이닝 - 배열 만들기4 (0) | 2025.12.09 |