[Swift] 10818 최소, 최대 - 백준 B3

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 수행속도
    0.0008 ~ 0.001 초
  • String.SubSequence -> String -> Int 수행 속도
    0.0006 ~ 0.0007 초

좋은 웹페이지 즐겨찾기