[Swift] 백준 - 1946번
백준을 풀면서 지금까지 가장 오래걸린거 같다...
틀리진 않았지만 시간초과 이슈를 해결하지 못해 오랫동안 고민을 했었다.
이 문제는 아래와 같은 내용이다.
import Foundation
// 라이노님의 FileIO
final class FileIO {
private var buffer:[UInt8]
private var index: Int
init(fileHandle: FileHandle = FileHandle.standardInput) {
buffer = Array(fileHandle.readDataToEndOfFile())+[UInt8(0)] // 인덱스 범위 넘어가는 것 방지
index = 0
}
@inline(__always) private func read() -> UInt8 {
defer { index += 1 }
return buffer.withUnsafeBufferPointer { $0[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)
}
@inline(__always) func readString() -> String {
var str = ""
var now = read()
while now == 10
|| now == 32 { now = read() } // 공백과 줄바꿈 무시
while now != 10
&& now != 32 && now != 0 {
str += String(bytes: [now], encoding: .ascii)!
now = read()
}
return str
}
}
let file = FileIO()
let testCase = file.readInt()
for _ in 0..<testCase {
let N = file.readInt()
var rank1 = Array(repeating: (0,0), count: N)
var rank2 = Array(repeating: 0, count: N)
for i in 0..<N {
let r1 = file.readInt()
let r2 = file.readInt()
rank1[i] = (i,r1)
rank2[i] = r2
}
rank1.sort(by: {$0.1 < $1.1})
var last = 0
var count = 1
for i in (1..<N) {
if rank2[rank1[i].0] < rank2[rank1[last].0] {
count += 1
last = i
}
}
print(count)
}
Author And Source
이 문제에 관하여([Swift] 백준 - 1946번), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leeyoungwoozz/Swift-백준-1946번저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)