Where who wants to meet someone
백준 Swift [10989] 수 정렬하기 3 본문
728x90
난이도
브론즈 I
문제
https://www.acmicpc.net/problem/10989
10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
내 답안
import Foundation
final class FileIO {
private let buffer:[UInt8]
private var index: Int = 0
init(fileHandle: FileHandle = FileHandle.standardInput) {
buffer = Array(try! fileHandle.readToEnd()!)+[UInt8(0)] // 인덱스 범위 넘어가는 것 방지
}
@inline(__always) private func read() -> UInt8 {
defer { index += 1 }
return buffer[index]
}
@inline(__always) func readInt() -> Int {
var sum = 0
var now = read()
var isPositive = true
while now == 10
|| now == 32 { now = read() } // 공백과 줄바꿈 무시
if now == 45 { isPositive.toggle(); now = read() } // 음수 처리
while now >= 48, now <= 57 {
sum = sum * 10 + Int(now-48)
now = read()
}
return sum * (isPositive ? 1:-1)
}
}
let fileIO = FileIO()
let n = fileIO.readInt()
var array = [Int]()
for _ in 1...n {
array.append(fileIO.readInt())
}
array.sort()
var result = ""
for i in array.indices {
result += "\(array[i])\n"
}
print(result)
- 기존에 정렬할 때 쓰던 방법으로는 시간 초과가 났기 때문에 다음의 자료를 참고하였다.
https://gist.github.com/JCSooHwanCho/30be4b669321e7a135b84a1e9b075f88
ps할 때 입력을 한꺼번에 받기 위한 유틸리티 클래스. fread의 swift 버전.
ps할 때 입력을 한꺼번에 받기 위한 유틸리티 클래스. fread의 swift 버전. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
- 위의 방법을 공유해주신 JCSooHwanCho 님 덕분에, FileIO의 readInt() 메서드를 사용해서 풀 수 있었다.
- 방법은 sort()만 사용할 때와 크게 다르지 않은데, 똑같이 입력을 받고, array에 append해준 뒤 sort()하여 result에 모아서 출력하는 방식을 사용했다.
- 혹시나 하나하나 print하는게 아니라 result로 모아서 출력한 것도 유의미한가? 해서 바꿨지만 어림도 없지..시간 초과
'백준 알고리즘 문제 기록 > 정렬' 카테고리의 다른 글
백준 Swift [11650] 좌표 정렬하기 (0) | 2023.08.02 |
---|---|
백준 Swift [1427] 소트인사이드 (0) | 2023.08.02 |
백준 Swift [2751] 수 정렬하기 2 (0) | 2023.08.01 |
백준 Swift [25305] 커트라인 (0) | 2023.08.01 |
백준 Swift [2587] 대표값2 (0) | 2023.08.01 |