๋ฐฑ์ค€ - ๊ธฐ์ฐจ๊ฐ€ ์–ด๋‘ ์„ ํ—ค์น˜๊ณ  ์€ํ•˜์ˆ˜๋ฅผ(Swift)

2022. 12. 2. 10:19ใ†Algorithm

๋ฐฑ์ค€ - ๊ธฐ์ฐจ๊ฐ€ ์–ด๋‘ ์„ ํ—ค์น˜๊ณ  ์€ํ•˜์ˆ˜๋ฅผ(Swift)

 

 

 ๋ฌธ์ œ ์„ค๋ช…

 

https://www.acmicpc.net/problem/15787

 

15787๋ฒˆ: ๊ธฐ์ฐจ๊ฐ€ ์–ด๋‘ ์„ ํ—ค์น˜๊ณ  ์€ํ•˜์ˆ˜๋ฅผ

์ž…๋ ฅ์˜ ์ฒซ์งธ ์ค„์— ๊ธฐ์ฐจ์˜ ์ˆ˜ N(1 ≤ N ≤ 100000)๊ณผ ๋ช…๋ น์˜ ์ˆ˜ M(1 ≤ M ≤ 100000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ดํ›„ ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ M+1๋ฒˆ์งธ ์ค„๊นŒ์ง€ ๊ฐ ์ค„์— ๋ช…๋ น์ด ์ฃผ์–ด์ง„๋‹ค. 

www.acmicpc.net

 

 ๋‚˜์˜ ํ’€์ด

 

์ž…๋ ฅ์œผ๋กœ 100,000์ด ๋“ค์–ด์˜ค์ง€๋งŒ ๊ธฐ์ฐจ์—์„œ ์ขŒ์„์„ ํ•œ ์นธ์”ฉ ๋‹น๊ธฐ๊ฑฐ๋‚˜ ๋ฏธ๋Š” ์ •๋„์˜ ํ–‰์œ„๋งŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n)์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์š”๊ตฌ์‚ฌํ•ญ๋Œ€๋กœ ๊ตฌํ˜„๋งŒ ์ž˜ ํ•ด์ฃผ๋ฉด ๋ฌธ์ œ๋Š” ์‰ฝ๊ฒŒ ํ’€๋ฆฐ๋‹ค.

 

import Foundation

struct Train: Hashable {
    var seats: [Int]
}

var trains = [Train]()
var availThrough = Set<Train>()
let nm = readLine()!.components(separatedBy:" ").map{Int($0)!}
let N = nm[0], M = nm[1]

for _ in 0..<N {
    trains.append(Train(seats: Array(repeating:0, count: 20)))
}

for _ in 0..<M {
    let input = readLine()!.components(separatedBy:" ").map{Int($0)!}
    let type = input[0]
    
    switch type {
    case 1: // i๋ฒˆ์งธ ๊ธฐ์ฐจ์— x๋ฒˆ ์ขŒ์„์— ํƒœ์›€
        trains[input[1]-1].seats[input[2]-1] = 1
    case 2: // i๋ฒˆ์งธ ๊ธฐ์ฐจ์— x๋ฒˆ ์ขŒ์„ ๋น„์›€
        trains[input[1]-1].seats[input[2]-1] = 0
    case 3: // ๋ชจ๋“  ์ขŒ์„ ํ•œ ์นธ์”ฉ ๋’ค๋กœ
        trains[input[1]-1].seats.removeLast()
        trains[input[1]-1].seats.insert(0, at:0)
    case 4: // ๋ชจ๋“  ์ขŒ์„ ํ•œ ์นธ์”ฉ ์•ž์œผ๋กœ
        trains[input[1]-1].seats.removeFirst()
        trains[input[1]-1].seats.append(0)
    default: break
    }    
}

for train in trains {
    availThrough.insert(train)
}
print(availThrough.count)