level1_K번째수

2024. 7. 1. 21:35파이썬_알고리즘(코딩테스트)/level1

 

내가 제출한 코드

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

 

  • commands 리스트의 길이만큼 반복문을 수행한다.
  • 각 반복마다 commands[i]는 세 개의 요소를 가진 리스트로 [start, end, k] 형태이다.
  • array를 start-1부터 end까지 슬라이싱하여 새로운 배열 arr을 만든다.
  • arr을 오름차순으로 정렬한다.
  • 정렬된 arr에서 k-1번째 요소를 answer 리스트에 추가한다.
  • 최종적으로 answer 리스트를 반환한다.

 

다른 사람이 제출한 코드1

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

 

  • lambda x : x는 commands의 각 요소를 의미한다. commands의 각 요소는 [start, end, k] 형태이다.
  • array[x[0] - 1 : x[1]]: array에서 start부터 end까지 자른다. 여기서 -1을 해주는 이유는 인덱스가 0부터 시작하기 때문이다. 예를 들어, start가 2이면, 실제로는 array의 1번 인덱스부터 시작해야 한다.
  • sorted(array[x[0] - 1 : x[1]]): 자른 배열을 정렬한다.
  • sorted(array[x[0] - 1 : x[1]])[x[2] - 1]: 정렬된 배열에서 k-1번째 값을 가져온다. -1을 해주는 이유는 역시 인덱스가 0부터 시작하기 때문이다. 예를 들어, k가 3이면 실제로는 정렬된 배열의 2번 인덱스를 가져와야 한다.
lambda 매개변수 : 표현식

 

map(함수, 리스트)

 

- 리스트로부터 원소를 하나씩 꺼내서 함수를 적용시킨 다음, 그 결과를 새로운 리스트에 담아준다. 

 

나와 같은 맘....

다른 사람이 제출한 코드2

def solution(array, commands):
    answer = []
    for command in commands:
        i,j,k = commands
        answer.append(list(sorted(array[i-1:j]))[k-1])
    return answer
  • commands 리스트의 각 명령을 command로 반복한다.
  • 각 command는 [start, end, k] 형태의 리스트이다.
  • i,j,k로 각각 start,end,k 값을 할당한다.
  • array[i-1:j]: array의 i-1부터 j까지의 부분 배열을 자른다.
  • sorted(array[i-1:j]): 자른 배열을 오름차순으로 정렬한다.
  • list(sorted(array[i-1:j]))[k-1]: 정렬된 배열에서 k-1번째 요소를 가져온다.
  • 최종적으로 answer 리스트를 반환한다. 

 

세상에 똑똑이들이 많은거 같다... ㅠㅠㅠ