기록

[programmers/python] K번째 수 - 배열 슬라이싱 본문

코딩테스트/python

[programmers/python] K번째 수 - 배열 슬라이싱

zyin 2025. 5. 25. 15:03

-url : https://school.programmers.co.kr/learn/courses/30/lessons/42748

이 문제는 주어진 배열에서 특정 구간을 자르고 정렬한 후, k번째 값을 추출하는 간단한 정렬 응용 문제이다.


문제 정의

주어진 정수 배열 array와 여러 개의 [i, j, k]로 구성된 명령어 배열 commands가 주어진다. 각 명령어에 대해 다음과 같은 연산을 수행한 결과를 리스트에 담아 반환한다.

  1. 배열 array의 i번째부터 j번째까지 자른다.
  2. 자른 배열을 정렬한다.
  3. 정렬된 배열에서 k번째 수를 추출한다.

인덱스는 1부터 시작하므로 슬라이싱 시 조정이 필요하다.

풀이 코드

def solution(array, commands):
    return [sorted(array[i-1:j])[k-1] for i, j, k in commands]
  • array[i-1:j]: Python은 0-based index이므로 i-1부터 j까지 자름.
  • sorted(...): 잘라낸 배열을 정렬.
  • [k-1]: 정렬된 배열의 k번째 값 추출.

예제

array = [1, 5, 2, 6, 3, 7, 4]
commands = [[2, 5, 3], [4, 4, 1], [1, 7, 3]]
print(solution(array, commands))  # 출력: [5, 6, 3]

동작 설명

  • [2, 5, 3] → [5, 2, 6, 3] → 정렬: [2, 3, 5, 6] → 3번째: 5
  • [4, 4, 1] → [6] → 정렬: [6] → 1번째: 6
  • [1, 7, 3] → [1, 5, 2, 6, 3, 7, 4] → 정렬: [1, 2, 3, 4, 5, 6, 7] → 3번째: 3
Comments