728x90
Programmers <수열과 구간 쿼리 2> 문제
문제 설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
제한사항
1 ≤ arr의 길이 ≤ 1,000
0 ≤ arr의 원소 ≤ 1,000,000
1 ≤ queries의 길이 ≤ 1,000
0 ≤ s ≤ e < arr의 길이
0 ≤ k ≤ 1,000,000
입출력 예
arr queries result
[0, 1, 2, 4, 3] [[0, 4, 2],[0, 3, 2],[0, 2, 2]] [3, 4, -1]
def solution(arr, queries):
answer = [] #빈 리스트 초기화
for s, e, k in queries: #queries 리스트를 순회하는 for 루프 시작
tmp = [] #빈 리스트 초기화. k보다 큰 값 임시 저장에 사용.
for i in range(s , e + 1):
if arr[i] > k:
tmp.append(arr[i])
if tmp: #tmp리스트가 비지 않았다면
answer.append(min(tmp))
else:
answer.append(-1)
return answer
queries는 [s, e, k]형태의 리스트로 이뤄진 리스트
arr의 특정 범위 s부터 e까지에서 k보다 큰 값들을 찾는 조건 정의.
for s, e, k in queries =>
s: 각 쿼리에서 탐색할 arr의 시작 인덱스
e: 각 쿼리에서 탐색할 arr의 끝 인덱스
k: 각 쿼리에서 비교할 기준 값. 문제에서는 arr의 해당 범위 내에서 k보다 큰 값들을 찾게 될 것.
for i in range(s, e +1) : arr의 인덱스 순회. e까지 포함하기 위해 e+1. 여기서 i는 현재 접근 중인 arr의 인덱스.
if arr[i] > k : arr의 현재 인덱스 i의 값(arr[i])이 k보다 큰지 확인
tmp.append(arr[i])로 임시 저장. append(i)하면 절대 안 됨.
for루프를 돌고 있으므로 k보다 큰 모든 값이 tmp에 들어 간다.
if tmp: tmp가 비어 있는지 아닌지 확인. if tmp는 'tmp 리스트에 하나 이상의 요소가 있다면'을 의미.
빈 리스트는 논리적으로 False, 비어 있지 않은 리스트는 True
answer.append(min(tmp)) : tmp에 들어있는 값 중에 가장 작은 값을 answer리스트에 추가
if tmp가 false라면
answer.append(-1) : answer에 -1 추가
728x90
'Programming Practice > Python' 카테고리의 다른 글
프로그래머스 <PCCP 기출문제 1번 / 동영상 재생기> Python (0) | 2025.04.18 |
---|---|
프로그래머스 <PCCE 기출문제 9번 / 지폐 접기> Python (3) | 2025.04.18 |
프로그래머스 <PCCE 기출문제 6번 / 물 부족> (0) | 2025.04.18 |
프로그래머스 <수열과 구간 쿼리 3> Python (0) | 2025.04.17 |
파이썬에서 list와 array의 차이점 + numpy.array (0) | 2025.04.17 |