알고리즘(Python, JavaScript) - K번재 수


Input

1
2
array = [1, 5, 2, 6, 3, 7, 4]	
commands = [[2, 5, 3], [4, 4, 1], [1, 7, 3]]

Expected Output

1
output = [5, 6, 3]

목표

배열 array에서 [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 array의 i번째 원소에서 j번째 원소까지를 추출한 후 그 중 k번째 원소를 찾아내어 리스트에 넣어 리턴하는 것

조건

  • array의 길이는 1 이상 100 이하
  • array의 각 원소는 1 이상 100 이하
  • commands의 길이는 1 이상 50 이하
  • commands의 각 원소는 길이가 3

코드

Python

1
2
3
4
5
6
7
8
9
10
11
12
# Long
def solution(array, commands):
result = []
for i in commands:
_array = array[i[0]-1:i[1]]
_array.sort()
result.append(_array[i[2]-1])
return result

# Short
def solution(array, commands):
return [sorted(array[i[0]-1:i[1]])[i[2]-1] for i in commands]

JavaScript

1
2
3
4
5
6
7
8
9
function solution(array, commands) {
var result = [];
commands.forEach(function(i){
var _array = array.slice(i[0]-1, i[1])
_array.sort((a,b)=>a-b);
result.push(_array[i[2]-1])
});
return result;
}

해설

  • array를 i와 j까지의 인덱스로 잘라냅니다. (1번째 원소의 인덱스는 0)
  • 잘라낸 배열을 정렬합니다.
  • 정렬된 배열에서 k번째의 인덱스를 리턴합니다.
  • 위의 과정을 commands배열의 원소 수 만큼 반복합니다.