반응형
안녕하세요. KataRN입니다.
오늘은 백준 시간초과 해결방법에 대해 알려드리려고합니다.
우선 이 방법은 알고리즘을 사용했음에도 시간초과가 되는 현상의 경우에 사용하시기 바랍니다.
알고리즘을 맞게 썼음에도 시간초과가 되는 경우가 있습니다.
그전에 잠깐!
백준에서 코딩테스트를 하기 위해서는 Command Line Tool을 사용해야합니다.
아래 글을 참고해주세요~(CommandLineTool : https://katarnios.tistory.com/37)
import Foundation
final class FileIO {
private let buffer: Data
private var index: Int = 0
init(fileHandle: FileHandle = FileHandle.standardInput) {
self.buffer = try! fileHandle.readToEnd()! // 인덱스 범위 넘어가는 것 방지
}
@inline(__always) private func read() -> UInt8 {
defer {
index += 1
}
guard index < buffer.count else { return 0 }
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)
}
@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 test1 = file.readInt() // 숫자
let test2 = file.readString() // 문자
var array = [Int]()
let n = file.readInt()
for _ in 0..<n {
array.append(file.readInt())
}
// 입력값
// 1
// "S"
// 5
// 1 2 3 4 5
// 출력값
// 1
// "S"
// [1, 2, 3, 4, 5]
Command Line Tool을 실행 시키고 데이터를 입력합니다.
그리고 Control + D를 누릅니다.
그러면 출력값이 나옵니다.
감사합니다.
반응형
'Old_SWIFT(221012) > 알고리즘이야기' 카테고리의 다른 글
백준에서 코딩테스트 해보기 (0) | 2022.02.20 |
---|---|
우선순위 큐, 힙 구현하기 (0) | 2022.02.19 |
최단거리 구하기 <다익스트라(Dijkstra)>, <플로이드 워셜(Floyd Warshall)> (0) | 2021.12.08 |
DP(동적계획법) (0) | 2021.11.16 |
DFS, BFS에 대해 알아봅시다. (0) | 2021.11.15 |