배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 반환하는 함수 구현하기
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 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입니다.
commands
의 길이만큼 반복문을 수행한다.
slice()
한다.
※ 배열의 인덱스는 0부터 시작함에 주의해야 한다.
push()
한다.
function solution(array, commands) {
var answer = [];
let sArray = [];
for(let i = 0; i< commands.length; i++){
// i부터 j만큼 배열 자르기
sArray = array.slice(commands[i][0]-1, commands[i][1]);
// 자른 배열 정렬
sArray = sArray.sort((a,b)=>a-b);
// k번 째 값 저장
answer.push(sArray[commands[i][2]-1])
}
return answer;
}
for 문 대신 map 을 사용한다면, 아래와 같이 구현할 수 있다.
function solution(array, commands) {
return commands.map(command => {
const [start, end, position] = command;
// i부터 j만큼 배열 자르기, 정렬 후 k번째 값 저장
return array.slice(start - 1, end).sort((a, b) => a - b)[position - 1];
});
}
def solution(array, commands):
answer = []
for command in commands:
# i부터 j만큼 배열 자르기
s_array = array[command[0]-1:command[1]]
# 자른 배열 정렬
s_array.sort()
# k번 째 값 저장
answer.append(s_array[command[2]-1])
return answer
이전에 학습했던 list comprehension
을 사용하면 아래와 같이 변경할 수 있다.
def solution(array, commands):
return [sorted(array[i-1:j])[k-1] for i, j, k in commands]