프로그래머스 파이썬 기초 트레이닝 :: 수열과 구간 쿼리 2 (list, sored *)
프로그래머스 URL
https://school.programmers.co.kr/learn/courses/30/lessons/181923
프로그래머스 코딩 카테고리
코딩 기초 트레이닝
Day 6 조건문, 반복문 - 수열과 구간 쿼리 2
Lv.0
문제 설명
정수 배열 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 / 2차원 정수배열 queries - 각원소는 [s, e, k]
[출력] 정수 배열 answer
1. queries 의 인덱스는 s, e, k 활용 가능
2. arr[]의 인덱스범위 = s부터 e까지 = arr[s:e+1]
3. k 값과 arr[i] 값 대소 비교.
배울 수 있는 점 : 2차원 배열 for문 원소, 리스트 슬라이싱, 정렬 활용 OR 임시배열과 min() 활용
------------------------
임시배열에 min() 활용한 방법
def solution(arr, queries):
answer = []
for s, e, k in queries:
tmp = []
for i in arr[s:e+1] :
if k < i :
tmp.append(i)
if tmp :
answer.append(min(tmp))
else :
answer.append(-1)
return answer
def solution(arr, queries):
answer = []
for s, e, k in queries :
tmp = [i for i in arr[s:e+1] if k < i]
answer.append(min(tmp) if tmp else -1)
return answer
배열 정렬을 활용하는 방법
def solution(arr, queries):
answer = []
for s, e, k in queries :
new = sorted(arr[s:e+1])
for i in new :
if k < i:
answer.append(i)
break
elif i == new[-1] :
answer.append(-1)
return answer
배운점
1. 리스트에 값 추가하는 for문 (리스트 컴프리헨션)
for i in arr[s:e+1] :
if k < i :
tmp.append(i)
append 메서드로 리스트에 값을 추가하는 for문을 한줄로 쓸때, 리스트 컴프리헨션을 사용하면 된다.
tmp = [i for i in arr[s:e+1] if k < i]
전체를 리스트로 감싸고 안에서 for문으로 값을 추가하는 것이기 때문에 append 메서드가 필요가 없다.
처음에 이를 모르고, 계속 list.append(i for i in arr[~] if ~ ) 이런식으로 append 메서드 안에서 for문을 사용했는데, 이는 오류를 발생한다.
왜냐하면, append 메서드는 iterable을 받을 수 없고, 하나의 값만을 받아서 리스트에 넣는 역할이기 때문이다.
2. sorted, sort
sorted는 함수이고, sort는 메서드이다.
2-1. sorted 함수
new_list = sorted(iterable, key=key, reverse=True)
② key (선택) : 기본값은 None, 순서를 결정하기 위해 실행할 함수
③ reverse (선택) : boolen 타입. 기본값은 False (오름차순), True 하면 내림차순 정렬
2-2. sort 메서드
listsort.(key=key, reverse=reverse)
① key (선택) : 기본값은 None, 순서를 결정하기 위해 실행할 함수
② reverse (선택) : boolen 타입. 기본값은 False (오름차순), True 하면 내림차순 정렬
댓글
댓글 쓰기