k번째수(python)

이민호·2021년 3월 21일
0

나의 풀이

  1. 리스트 array를 [(i-1):j] 만큼 슬라이싱 한다.
  2. heapq로 정렬한다.
  3. k번째 만큼 heappop으로 값을 구한다.

heapq를 이용하면 sort()를 이용해 모든 수를 다 정렬하는것 보다 빠르기 때문에 사용한다.

import heapq
def solution(array, commands):
  answer = []
  for c in commands:
      i, j, k = c 
      # 자르기
      temp = array[(i-1):j]
      # 정렬
      temp2 = []
      for t in temp:
          heapq.heappush(temp2, t)
      #k번째 숫자 구하기
      for n in range(k):
          a = heapq.heappop(temp2)
  .
      answer.append(a)

알게된 점

나는 처음에 i, j, k를 받아올 때

for c in commands:
	i, j, k = c[0], c[1], c[2]

이렇게 받아왔었다.
그러나

for c in commands:
	i, j, k = c

이렇게 표기 할 수 있음을 알게 되었다.

그렇다면 c의 갯수와 변수의 갯수가 달라도 저렇게 될까?

list = [[2, 5, 3], [4, 4, 1], [1, 7, 3]]
for c in list:
    n, m = i
    print(n, m)

결과는

ValueError: too many values to unpack (expected 2)

이 나온다
즉, 변수의 갯수와 c의 요소 갯수가 같아야 한다.

다른사람 풀이

def solution(array, commands):
    return list(map(lambda x:sorted(array[x[0]-1:x[1]])[x[2]-1], commands))

map과 lambda를 이용하여 한줄로 작성하였다.
그러나 이는 모든수를 다 정렬하므로 시간이 오래 걸리는 단점이 있다.

profile
life is fun

0개의 댓글