문제 설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
제한사항
- 1 ≤ 1 ≤ arr의 길이 ≤ 1,000
0 ≤ arr의 원소 ≤ 1,000,000 - 1 ≤ queries의 길이 ≤ 1,000
0 ≤ s ≤ e < arr의 길이
0 ≤ k ≤ 1,000,000
문제 풀이
접근 전략
각 쿼리마다, 주어진 범위의 배열 원소를 스캔하며 조건에 맞는 원소를 찾아 반환하면 끝. 본인은 try-except 문을 사용해서 코드를 작성했음.
코드
def solution(arr, queries):
answer = []
for a,b,c in queries:
try:
temp = min([i for i in arr[a:b+1] if i > c])
except ValueError:
temp = -1
answer.append(temp)
return answer
결과 및 해석
위의 코드는 각 쿼리에 대해 배열의 해당 범위를 스캔하며 조건에 맞는 최소값을 찾음. 만약 조건에 맞는 원소가 없다면 except ValueError 하에 내려가서 -1을 반환하도록 함.
chatGPT 형님은 try-except를 사용하지 않고 min 함수의 default 파라미터를 이용하여 조건에 맞는 원소가 없을 때의 처리를 간결하게 표현함. 이로 인해 코드의 가독성이 한줄컷으로 완전 좋아짐. 리얼로 사기 아님?
def solution(arr, queries):
return [min((x for x in arr[s:e+1] if x > k), default=-1) for s, e, k in queries]
'Python study > Programmers Lv0' 카테고리의 다른 글
[Programmers] 주사위 게임 3 (0) | 2023.07.24 |
---|---|
[Programmers] 배열 만들기 2 (0) | 2023.07.23 |
[Programmers] 등차수열의 특정한 항만 더하기 (0) | 2023.07.19 |
[Programmers] 코드 처리하기 (0) | 2023.07.16 |
[Programmers] 조건 문자열 (0) | 2023.07.15 |