[Python#48] K번째 수

Gi Woon Lee·2024년 9월 2일
0

Python

목록 보기
8/13

K번째 수

문제 개요

append 메서드, sorted() 함수, 리스트 슬라이싱에 대한 개념이 필요한 문제.

arraycommands가 주어진다.

array = [1, 5, 2, 6, 3, 7, 4]
commands = (a, b, c)
-> array의 a번 부터 b번 까지의 숫자를 가져온 뒤 c번째 숫자를 가져오라는 뜻이다.

array가 [1, 5, 2, 6, 3, 7, 4]이고 commands가 (2, 5, 3)이라면 답은 5다.

방법: 슬라이싱

이를 슬라이싱 개념으로 바꿔서 절차를 설명하면 다음과 같다.
1. array[a-1: b] -> a번째 숫자무터 b번째 숫자 바로 전 까지 가져온다.
2. sorted(array[a-1: b]) -> 해당 숫자들을 정렬한다.
3. sorted(array[a-1: b])[c-1] -> 정렬된 숫자의 c번째 숫자를 가져온다.

위 과정을 for문으로 옮기면 답이 나온다.

def solution(array, commands):
    answer = []
    for com in commands:
    	# 이 부분이 핵심이다. 슬라이싱 정리와 번갈아가며 이해하라. 
        answer.append(sorted(array[com[0]-1:com[1]])[com[2]-1])
    return answer
    

정리

commands 속에 조건이 여러개 들어있어 살짝 당황했으나, 오히려 그 덕분에 for문으로 수월하게 풀어낼 수 있었다.

commands 조건 속 고정된 위치에 고정된 역할의 조건이 배정되어 있으니 리스트 슬라이싱으로 각각의 조건을 따르는 값들을 append할 수 있었다.

0개의 댓글