본문 바로가기

Python/프로그래머스

[프로그래머스] [Python] K번째 수

문제 풀이

 

def solution(array, commands):
    answer = []

    # 시작 인덱스, 마지막 인덱스, 그리고 K번째 숫자를 commands에서 가져온다.
    for startidx, endidx, numK in commands:

        # 시작 인덱스와 K번째 숫자에 -1을 하는 이유는 배열 인덱스가 0부터 시작하기 때문이다.
        # 마지막 인덱스에 -1을 하지 않는 이유는 '미만'처리가 되어 마지막 인덱스가 포함되지 않기 때문이다. 즉 -1이 이미 되어있다.

        # array의 [시작 인덱스 - 1 부터(:) 마지막 인덱스] 까지 가져온 후 정렬하여 sorted_array에 넣는다.
        sorted_array = sorted(array[startidx - 1:endidx])

        # K번째 숫자는 numK-1 위치에 있다. 이를 answer에 집어넣으면 끝.
        answer.append(sorted_array[numK - 1])

 위의 코드는 직접 코딩한 코드이고, 다른 사람의 풀이 중 어마어마한 것이 있어 가져와본다.

 

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

1. map(lambda x : sorted(array[x[0] - 1 : x[1]])[x[2] - 1], commands)

- 람다 x는 commands이다. 

- x에 관하여, array에서 x[0]-1 (startidx) 부터(:) x[1] (endidx) 까지 가져온 후 정렬.

- 여기에서 [x[2]-1] (numK)를 가져온다.

2. return list( ~ )

- 가져온 [x[2]-1] (numK) 들을 리스트화 하여 반환한다.

 

 

문제 링크

 

programmers.co.kr/learn/courses/30/lessons/42748?language=python3

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr