반응형
주어진 범위를 정렬한 뒤 K번째 수를 출력하는 문제입니다.
파이썬의 내장 함수를 사용해도 되지만 복습 차원에서 퀵 정렬을 사용해 문제를 풀이해 보았습니다
퀵 정렬을 구현하는 함수를 만들고, 입력받은 커맨드에 따라 원본 배열에서 범위를 추출하여 퀵 정렬 함수에 전달하고 정렬된 배열에서 k번 째(k-1) 데이터를 출력하도록 구성했습니다.
문제 풀이(파이썬)
def Qsort(s, e):
if s < e:
pivot = tmp[e]
pos = s
for i in range(s, e):
if tmp[i] < pivot:
tmp[pos], tmp[i] = tmp[i], tmp[pos]
pos += 1
tmp[pos], tmp[e] = tmp[e], tmp[pos]
Qsort(s, pos-1)
Qsort(pos+1, e)
def solution(array, commands):
global tmp
res = list()
for c in commands:
i, j, k = c
# 원본 arr에서 영역 추출
tmp = list()
for a in range(i-1, j):
tmp.append(array[a])
Qsort(0, len(tmp)-1)
res.append(tmp[k-1])
return res
파이썬스러운 풀이 방법
def solution(array, commands):
return list(map(lambda x:sorted(array[x[0]-1:x[1]])[x[2]-1], commands))
# 파이썬 내장함수 사용 + 직관적으로 이해하기 쉬운 코드
def solution(array, commands):
answer = []
for command in commands:
i,j,k = command
answer.append(list(sorted(array[i-1:j]))[k-1])
return answer
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스] 정렬 - H-Index(파이썬 문제 풀이) (0) | 2021.03.18 |
---|---|
[프로그래머스] 정렬 - 가장 큰 수(파이썬 문제 풀이) (0) | 2021.03.18 |
[ BOJ ] 백준 2805 - 나무 자르기(파이썬 문제 풀이) (0) | 2021.03.14 |
[ BOJ ] 백준 2512 - 예산(파이썬 문제 풀이) (0) | 2021.03.14 |
[ BOJ ] 백준 2750 - 수 정렬하기(파이썬 문제 풀이) (0) | 2021.03.13 |
댓글