본문 바로가기
알고리즘

[python]programmers -K번째수

by ujin2021 2020. 8. 25.

문제

 

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

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

programmers.co.kr

level1, 정렬 카테고리에 속한 문제이다.

1. 내코드

2. 관련 문법

  • list slice
    연속적인 객체들에 대해 범위를 지정해 가져오는 방법이다. 리스트, 튜플, 스트링 모두 슬라이싱 가능하다.
    슬라이싱을 하면 새로운 객체를 생성한다(복사하는 것과 같다) - 이부분이 매일 헷갈린다.
    기본형태 : arr[start:end:step] start, end, step 모두 양/음수 가능하다.
    참고블로그
  • sorted
    list.sort()는 리스트 내부에서만 정렬되며, None 을 return하는 반면 sorted는(sorted(list)) 정렬된 값을 돌려받는다.
    list.sort()는 리스트만 사용가능, sorted는 iterable한 것에 대해 모두 사용가능하다.
    key를 지정할 수 있는데, 함수가 들어와야 한다.
    참고블로그  

3. 다른사람 풀이

나처럼 for문을 쓰지않고, lambda를 사용해 한줄로 풀이한 것도 있고, tmp를 굳이 정의하지않고 그냥 sorted안에 바로 넣어 좀더 코드줄 수를 줄인 풀이도 있었다.

 풀이 1)

더보기

x가 commands의 원소가 된다. sorted를 사용하고 x[2]-1번째 수를 얻어내는 것은 같다. 

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

 풀이 2)

더보기

 풀이가 비슷한데, i, j, k = command로 command 리스트안의 원소들이 매치되는 방법은 모르고 있었다. 여기선 sorted하고 특정 번째의 원소를 가져와 append하는 것을 한줄로 표현했다.

def solution(array, commands):
    answer = []
    for command in commands:
        i,j,k = command
        answer.append(list(sorted(array[i-1:j]))[k-1])
    return answer

확실히 lambda를 쓰면 코드가 간결해진다. 좀더 공부해야겠다.

'알고리즘' 카테고리의 다른 글

[python]programmers-같은숫자는 싫어  (0) 2020.08.27
[python]programmers-2016년  (0) 2020.08.27
[python]직사각형 한점 찾기  (0) 2020.08.25
java/python 진수변환  (0) 2020.07.31
python 입력받기  (0) 2020.07.29