18528 - 큐 2

Screen Shot 2022-04-28 at 5.12.36 PM.png

//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 - 프린터 큐

Screen Shot 2022-04-28 at 5.50.14 PM.png

// 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 하나만 넣어서 풀었는데 도저히 안 풀렸다.