Swift로 백준 10818 최소, 최대 문제를 해결하며 얻은 지식을 정리합니다. Swift로 접근해서 그런지 시간 초과를 많이 경험할 수 있었고 타입 변환 시 순서나 징검다리 타입(최종 타입으로 변환하기 위해 거쳐가는 타입) 따라 처리 속도가 다르다는 점을 알게 되었습니다.
let n: Int = Int(readLine()!)!
let numbers: [Int] = readLine()!.split(separator: " ").map { Int(String($0))! }
print(numbers.min()!, numbers.max()!)
입력 후 공백 단위로 문자열을 나누에 배열에 넣는 방법으로 readLine()!.split(separator: " ")
방식을 많이 활용하고 있습니다. 이 결과로 반환 받는 결과의 타입은 [String.SubSequence]
으로 보통의 [String]
과는 타른 타입임을 알고 계실 것입니다. SubSequence
는 아래 공식 문서와 같이 Collection 타입에서 어떤 것의 부분 (Subrange 또는 Slice)임을 나타내는 타입인데, 배열 내부 각 요소의 타입을 map(_:)
과 Int
의 이니셜라이저를 통해 Int
타입으로 변환할 때 String.SubSequence -> Int
보다 String.SubSequence -> String -> Int
의 수행속도가 더 빠르다는 것을 알게 되었습니다.
문제의 예제입력 1인 20 10 35 30 7
을 대상으로 수행속도를 측정해보았습니다.
String.SubSequence -> Int
수행속도String.SubSequence -> String -> Int
수행 속도