주어진 배열 array와 명령 목록 commands에 따라 특정 부분 배열을 자르고 정렬 후, 지정된 위치의 값을 찾아 반환하는 문제.
명령(commands)의 구조: [i, j, k]
i: 자를 배열의 시작 인덱스(1부터 시작).
j: 자를 배열의 끝 인덱스(1부터 시작).
k: 정렬된 배열에서 찾을 값의 위치(1부터 시작).
부분 배열 추출:
i에서 j까지의 값을 잘라내는 데 Python의 슬라이싱처럼 Swift의 Array 서브스크립트 활용.
정렬:
sorted()를 사용하여 자른 배열 정렬.
k번째 값 반환:
정렬된 배열의 인덱스에 접근(k-1).
최종 결과:
각 명령에 대해 결과 값을 계산하여 배열로 반환.
func solution(_ array: [Int], _ commands: [[Int]]) -> [Int] {
var result = [Int]() // 결과를 담을 배열
for command in commands { // 각 명령을 순회
let i = command[0]
let j = command[1]
let k = command[2]
// 1. i번째부터 j번째까지 자름
let sliced = Array(array[i-1...j-1])
// 2. 정렬
let sorted = sliced.sorted()
// 3. k번째 값 추출 후 결과에 추가
result.append(sorted[k-1])
}
return result
}
배열 슬라이싱:
Swift에서는 [i...j]를 통해 배열의 특정 범위를 자를 수 있음. 단, 0-based 인덱싱을 사용하므로 명령에 제공된 1-based 인덱스를 변환(i-1, j-1)해야 함.
정렬:
sorted() 메서드는 배열의 요소를 오름차순으로 정렬해 반환.
결과 추가:
result.append()를 사용하여 값을 배열에 추가.
let array = [1, 5, 2, 6, 3, 7, 4]
let commands = [[2, 5, 3], [4, 4, 1], [1, 7, 3]]
출력:
let output = solution(array, commands) // [5, 6, 3]
과정:
명령 1 [2, 5, 3]:
array[1...4] → [5, 2, 6, 3]
정렬: [2, 3, 5, 6]
3번째 값: 5.
명령 2 [4, 4, 1]:
array[3...3] → [6]
정렬: [6]
1번째 값: 6.
명령 3 [1, 7, 3]:
array[0...6] → [1, 5, 2, 6, 3, 7, 4]
정렬: [1, 2, 3, 4, 5, 6, 7]
3번째 값: 3.
Swift의 배열 슬라이싱과 정렬 메서드는 간결한 코드를 작성하는 데 큰 도움을 준다.
1-based 인덱스를 처리할 때 0-based 배열 인덱싱을 고려해야 하는 점이 중요하다.
코드가 간단한 것 같아도 문제를 단계별로 잘 쪼개어 해결하는 연습이 필요함.