오늘 푼 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42748?language=swift
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 코드
import Foundation
func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
var answer = [Int]()
for com in commands {
let i = com[0] - 1
let j = com[1] - 1
let k = com[2] - 1
let slicedArray: [Int] = Array(array[i...j]).sorted()
answer.append(slicedArray[k])
}
return answer
}
오늘 배운 것
Swift에서 배열을 다루는 방법 중 하나는 범위를 사용하여 배열의 일부를 추출하는 것.
let slicedArray = Array(array[i...j]).sorted()
위 코드를 자세히 보자.
array[i...j]는 Swift의 범위 연산자 ...를 사용하여 배열 array에서 인덱스 i부터 j까지의 부분 배열을 생성한다. (양 끝 포함)
이 때 주의할 점은, ArraySlice 타입을 사용했는데 이것은 독립적인 Array 가 아니므로 Array 타입으로 명시적 변환을 시켜주었다는 것이다.
느낀점
https://developer.apple.com/documentation/swift/arrayslice
ArraySlice | Apple Developer Documentation
A slice of an , , or instance.
developer.apple.com
오늘은 ArraySlice 에 대해서 간단히 살펴보았다.
위 문제와 같이 인덱스 범위를 통해 새로운 범위의 배열을 지정한 경우에는, Array 타입이 아닌 ArraySlice 타입이 된다.
사실 이 문제는, 파이썬으로 이전에 풀어보았는데, 스위프트에서는 배열의 인덱스 슬라이딩을 하는 과정에서 Array로 타입변환을 해주지 않으면, 리턴 값이 달라 에러가 나기에 주의 해야했다.