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

HICHULOG·2023년 7월 26일
0

프로그래머스

목록 보기
25/38
post-thumbnail

수열과 구간 쿼리 1

📝 문제

정수 배열 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의 길이

💡 풀이

function solution(arr, queries) {
    for(let i=0; i<queries.length; i++){
        let [s,e] = queries[i];
        for(let j=0; j<=e; j++){
            if(j>=s && j<=e){
               arr[j]++;
            }
        }
    }
    return arr;
}

=> 처음에 문제에서 제시한 i를 인덱스라고 착각했다. 인덱스가 아니라면 굳이 조건을 넣을 필요가 없는 것 같다. query인 [s,e]에서 arr[s]~arr[e]요소에 더하기 1씩해주면 되는 문제였다. 복잡하게 푼 것 같다. 문제를 제대로 이해하고 다시 풀어봤다.

function solution(arr, queries) {
    queries.map(x=>{
        for(i=x[0]; i<=x[1]; i++){
            arr[i]++;
        }
    })
    return arr;
}

✅ 다른 풀이

function solution(arr, queries) {
    queries.forEach(([s, e]) => {
        while (s <= e) arr[s++]++;
    });
    return arr;
}

=> for문이 아닌 while문으로 반복문을 사용하였다.

function solution(arr, q) {
    q.map((a)=>{
        for(let i = a[0]; i<=a[1]; i++){
            arr[i]+=1;
        }
    })

    return arr;
}

=> 다시 풀어본 나의 방식과 같은 풀이였다.

🚀 TIL

문제를 제대로 이해하고 풀어야할 것 같다.

profile
🚀 Front-end Dev

0개의 댓글