//18528
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)
}
@inline(__always) func readString() -> Int {
var str = 0
var now = read()
while now == 10 || now == 32 { now = read() }
while now != 10 && now != 32 && now != 0 {
str += Int(now)
now = read()
}
return str
}
}
var q:[Int] = []
var front = 0
var rear = 0
let file = FileIO()
let count = file.readInt()
for _ in 1...count {
let input = file.readString()
switch input{
case 448:
q.append(file.readInt())
rear += 1
case 335:
if front == rear {
print("-1")
} else {
print("\\(q[front])")
front += 1
}
case 443:
print("\\(rear - front)")
case 559:
rear - front == 0 ? print("1") : print("0")
case 553:
rear - front == 0 ? print("-1") : print("\\(q[front])")
case 401:
rear - front == 0 ? print("-1") : print("\\(q[rear - 1])")
default: print("error")
}
}
큐에 대해 다루는 아주 기본적인 문제
하지만 Swift 의 입출력 속도때문에 11번 틀렸다....
물론 기업 코테에서 입출력 시간 때문에 오답이 되는 경우는 없다.
각 언어별로 입출력 시간 때문에 시간초과될 경우, 어떻게 처리하는지 알아두면 좋을 것 같다.
// 1966
import Foundation
let count = Int(readLine()!)!
for _ in 1...count {
let input = readLine()!.components(separatedBy: " ").map{Int($0)!}
let n = input[0]
let m = input[1]
var key = readLine()!.components(separatedBy: " ").map{Int($0)!}
var number = 0
// (index, 중요도)
var q:[(Int, Int)] = []
for (index, priority) in key.enumerated() {
q.append((index, priority))
}
key.sort()
while(true) {
if q[0].1 == key.max() {
number += 1
if q[0].0 == m {
print(number)
break
} else {
q.removeFirst()
key.popLast()
}
} else {
q.append(q.removeFirst())
}
}
}
Swift에서 변수를 두 개 다룰 수 있는 Tuple을 사용했다.
처음에는 큐에 priority 하나만 넣어서 풀었는데 도저히 안 풀렸다.