Programmers

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

winter17 2023. 6. 26. 16:02

https://school.programmers.co.kr/learn/courses/30/lessons/181923

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 과정

function solution(arr, queries) {
    var answer = [];
    for (let j = 0; j < queries.length; j++){
        const [s, e, k] = queries[j]
        let array = []
        for (let i = s; i <= e; i++){
            if (arr[i] > k){
             array.push(arr[i])   
            }
        }
        if (array.length){
            answer.push(Math.min(...array))   
        }else{
            answer.push(-1)
        }
    }
    return answer;
}

이전의 수열과 쿼리 문제 흐름과 비슷하게 풀면 되는데 

문제에서 'i의 범위는 s이상 e이하'라고 했기 때문에 반복문 범위를 잡아주고 

'모든 i에 대해 k보다 크면서 가장 작은 arr [i]를 찾는다'라고 했기 때문에 조건문을 arr [i] > k라고 한 후 array 빈 배열에 arr [i] 값을 push 한다. → k보다 큰 arr[i]값 중에서 가장 작은 값을 찾는 것

그다음 array배열 만드는 반복문 밖에서 array배열에 요소가 존재한다면 array배열에서 최솟값을 찾아서 answer배열에 push

array 배열에 요소가 없다면 -1을 push 한 후 마지막에 answer를 반환한다.


리뷰

중간에 '모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾는다'라는 말을 'i는 k보다 크다'라고 이해를 해서 조건문을 하나 잘못작성했는데

'arr[i]는 k보다 큰 값들 중에서 가장 작은 값을 찾는다'라고 봐야한다.

그 부분만 수정하니까 통과했다