python/알고리즘 문제풀이

[프로그래머스 | python3] K번째 수_ sort() 사용

빛날희- 2021. 5. 12. 15:29

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이번 문제는 한번에 풀었지만 코드를 더 간략하게 만드는 연습을 해야할 것 같다. 

for문을 사용하여 문제를 풀어보았지만, lambda함수를 사용하면 더 간결하게 해결할 수 있을 것으로 보인다. 

 

> 작성 답안

 

def solution(array, commands):
    resultLst=[]
    for i in range(len(commands)):
        arr= array[commands[i][0]-1 : commands[i][1]]
        arr.sort()
        resultLst.append(arr[commands[i][2]-1])
    return resultLst

* 리스트 인덱싱할 때를 조심해야한다. 문제에서 2번째에서 5번째 요소가 리스트에선 1번째 요소에서 4번째 요소를 말하는 것이기 때문에 2번째에서 5번째 요소를 뽑아오고 싶으면 슬라이싱을 array[1:5]로 해야한다. 

 

* sort 메서드의 사용을 주의해야한다. sort()메소드는 대상이 되는 기존 array의 배열을 아예 바꿔버리기 때문에 따로 재배열된 리스트를 담을 변수를 선언해야할 필요가 없다. (sorted()함수는 재배열된 새로운 리스트를 반환)

 

* 슬라이싱된 리스트는 배열의 원소를 조회하는 것이지 슬라이싱된 리스트 객체를 돌려주는 수단은 아니다. 슬라이싱된 배열을 대상으로 sort()메소드를 사용하면 None이 나온다. 

이는 sort가 리스트의 메소드인데 위의 코드에서 슬라이싱된 리스트는 조회된 리스트이지 객체로서의 리스트가 아니기 때문에 None을 반환한다.