본문 바로가기

코딩테스트

[프로그래머스] Python - Lv.0 수열과 구간 쿼리 2

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

 

프로그래머스

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

programmers.co.kr

문제

코드 1

def solution(arr, queries):

    answer = []
    
    for i in range(len(queries)) :
        mid = []
        a = queries[i][0]
        b = queries[i][1]
        c = queries[i][2]
        
        for j in range(a, b + 1) :
            if arr[j] > c :
                mid.append(arr[j])
        try :
            answer.append(min(mid))
        except:
            answer.append(-1)
    
    return answer

코드 2 (남이 푼거.. 예쁘다..나는 바보..)

def solution(arr, queries) :
    answer = []
    
    for s,e,k in queries :
        mid = []
        for i in arr[s:e+1] :
            if i > k :
                mid.append(i)
        answer.append(-1 if not mid else min(mid))
    
    return answer

풀이

※ 헷갈렸던 점

 - query[s, e, k] 에 대해서 

'각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.'

라고 되어있는데, 입출력 예를 보니, arr[s] ~ arr[i] 값에 대해 k보다 크면서 가장 작은 arr[i]를 찾으라는 말이었다.

 

예시를 고대로 가져와보면,, 

queries[[0,4,2],[...]]에 대해서는 arr[0]~arr[4] -> [0,1,2,4,3] 배열 중 2보다 큰 값을 찾는거니까 3,4이고 그 중 작은 값인 3이 들어가는거였다.

 

※ try except문은 다른 분이 푼걸 참고했다.

     찾아보니 try/except를 사용해도 되고, 애초에 sort를 통해 순서대로 정렬하는 방법도 있는 것 같다.

     레벨0이지만 점점 여러 문법들을 사용해야만 하는 문제들이 등장하고 있는 것 같다..