Sort - K번째 수 (Lv.1)

2022. 2. 17. 12:492022/Programmers

문제 설명

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 2에서 나온 배열의 3번째 숫자는 5입니다.

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항
  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.
입출력 예
array commands return
[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]
입출력 예 설명

[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.
[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다.
[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.

<My Source Code 1>

def solution(array, commands):
    answer = []
    
    for eachCommands in commands:
        startIdx = eachCommands[0]-1
        endIdx = eachCommands[1]
        findIdx = eachCommands[2]-1
        
        tempList = sorted(array[startIdx:endIdx])
        findNum = answer.append(tempList[findIdx])
        
    return answer

레벨 1이라 그런지 어렵지 않게 통과할 수 있었다.

그런데 여기서도 나같은 말하는 감자는 배울게 있었다.

 

한줄짜리 소스코드를 만든 사람이 있는것이다.

충격!!!!!!!!!!!!!!!!!!!!!!!

어쨌든... 뭐라도 하나 배우는게 좋으니 나도 코드를 줄여보자는 관점으로 다시 시도해보았다.

 

<My Source Code 2>

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

map 함수는 리스트의 요소를 지정된 함수로 처리하는 함수로 map(함수, 리스트/튜플) 형태이다.

확실히 리스트 처리할 때 map 을 이용하면 불필요한 반복문을 줄여 훨씬 파이썬답게? 만들수있는 것 같다.

 

그리고 함수는 lambda를 이용해 한줄로 마무리 하였다. 

lambda를 사용하는게 아직은 좀 어색한데 간결한 코드를 위해서는 익숙해질 필요가 있는 것 같다.

 

lambda의 x는 commands의 각각의 요소가 되고, 

x[0]은 배열의 시작, x[1]은 배열의 끝, x[2]는 찾는 숫자의 위치이므로 이들을 이용해 정렬하면된다.

 

간단한 문제였지만, 또 하나를 배우게 된 공부였다.

'2022 > Programmers' 카테고리의 다른 글

Heap - 디스크 컨트롤러** (Lv.3)  (0) 2022.02.20
Sort - H-Index (Lv.2)  (0) 2022.02.18
Sort - 가장 큰 수** (Lv.2)  (0) 2022.02.16
Stack/Queue - 프린터(Lv.2)  (0) 2022.02.15
Hash-베스트 앨범(Lv.3)  (0) 2022.02.14