1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- ๋จ์ ์ ํ ํ์์๋ ํฌ ํฌ์ธํฐ front์ rear๊ฐ ๊ณ์ ์ฆ๊ฐ๋ง ํ๊ฒ ๋๋ฏ๋ก, ๋ฐฐ์ด์ ์ ๊ณต๊ฐ์ ๋ญ๋นํ๊ฒ ๋จ
- ๋ฐ๋ผ์ ํ ๋ด์ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ์ ์งํ๋ ๋ณ๋์ count๋ฅผ ๋์ด overflow์ underflow๋ฅผ ํ์ ํ๊ณ , ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ํ์ ํ๋ฉฐ,
- front์ rear๊ฐ ๋ฐฐ์ด์ ๋์ ๋๋ฌํ๊ฒ ๋๋ฉด 0์ผ๋ก ์ด๊ธฐํ ํด์ค์ผ๋ก์จ ๋จ์ ์ ํ ํ์ ๋จ์ ์ ํด๊ฒฐํ ์ ์์
5. ์ ์ฒด ์ฝ๋
//MARK: - ์ํํ ๊ตฌํํ๊ธฐ
//MARK: - Framework
import Foundation
//MARK: - Type
struct Queue {
//MARK: - Property
var array: [Int]
var f: Int
var r: Int
var count: Int
var capacity: Int
//MARK: - Initialzier
init(_ capacity: Int) {
self.capacity = capacity
self.f = 0
self.r = 0
self.count = 0
self.array = Array(repeating: 0, count: capacity)
}
//MARK: - Method
mutating func push(_ data: Int) -> Void {
if self.count >= self.capacity {
print("Overflow")
} else {
self.array[self.r] = data
self.r += 1
self.count += 1
self.r = self.r >= self.capacity ? 0 : self.r
}
}
mutating func pop() -> Void {
if self.count <= 0 {
print("Overflow")
} else {
self.array[self.f] = 0
self.f += 1
self.count -= 1
self.f = self.f >= self.capacity ? 0 : self.f
}
}
func front() -> Int {
return self.count <= 0 ? -1 : self.array[self.f]
}
func size() -> Int {
return self.count
}
}
//MARK: - Function
func solution() -> Void {
//MARK: - Input
guard let input = readLine()?.components(separatedBy: " ") else { return }
let n: Int = input.map { Int($0) }[0] ?? 0
let m: Int = input.map { Int($0) }[1] ?? 0
var queue: Queue = Queue(n)
//MARK: - Process & Output
for _ in 0..<m {
guard let inputData = readLine()?.components(separatedBy: " ") else { return }
let operation: Int = inputData.map { Int($0) }[0] ?? 0
switch operation {
case 1:
let data: Int = inputData.map { Int($0) }[1] ?? 0
queue.push(data)
case 2:
queue.pop()
case 3:
print(queue.front() == -1 ? "NULL" : "\(queue.front())")
default:
break
}
}
}
solution()
์ ์ฒด์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
'Swift Data Structure And Algorithm > Queue' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ ๊ตฌํํ๊ธฐ (0) | 2022.04.03 |
---|