728x90
https://www.acmicpc.net/problem/10866
스위프트에서 덱 자료구조는 없어서 직접 구현해야 한다.
먼저 덱이라는 것은 큐와 비슷한데 큐는 한방향으로만 값을 넣을 수 있다면 덱은 양방향으로 값을 넣을 수 있는 것이다.
큐는 한쪽이 막혀있는 원통형 튜브
덱은 빨대 라고 생각하면 된다.
먼저 아래 코드처럼 함수를 하나하나씩 구현해서 만드는 방법이 있고 아예 배열과 삼항연산자로 짧게 조건문으로도 구현 할 수 있다.
import Foundation
let n = Int(readLine()!)!
var deque : [Int] = []
for _ in 0..<n {
let a = readLine()!.split(separator: " ").map{ String($0)}
switch a[0]{
case "push_front":
push_front(Int(a[1])!)
break
case "push_back":
push_back(Int(a[1])!)
break
case "pop_front":
print(pop_front())
break
case "pop_back":
print(pop_back())
break
case "size":
print(size())
break
case "empty":
print(empty())
break
case "front":
print(front())
break
case "back":
print(back())
break
default:
break
}
}
func push_front(_ x: Int){
if deque.isEmpty{
deque.append(x)
}else {
deque.reverse()
deque.append(x)
deque.reverse() // append 자체가 맨 뒤에 추가하는 것이므로 배열을 모두 뒤집어서 추가한후 다시 원상 복귀 시키면 됨.
}
}
func push_back(_ x: Int){
deque.append(x)
}
func pop_front() -> Int {
if deque.isEmpty {
return -1
}else{
return deque.removeFirst()
}
}
func pop_back() -> Int {
if deque.isEmpty {
return -1
}else {
return deque.removeLast()
}
}
func size() -> Int {
return deque.count
}
func empty() -> Int {
if deque.isEmpty{
return 1
}else {
return 0
}
}
func front() -> Int {
if deque.isEmpty {
return -1
}else{
return deque.first!
}
}
func back() -> Int {
if deque.isEmpty {
return -1
}else {
return deque.last!
}
}
import Foundation
let N = Int(readLine()!)!
var deque = [Int]()
for _ in 0..<N {
let commandLine = readLine()!.split(separator: " ")
let command = String(commandLine[0])
if command == "push_front" {
deque.insert(Int(commandLine[1])!, at: 0)
} else if command == "push_back" {
deque.append(Int(commandLine[1])!)
} else if command == "pop_front" {
print(deque.isEmpty ? -1 : deque.removeFirst())
} else if command == "pop_back" {
print(deque.isEmpty ? -1 : deque.removeLast())
} else if command == "size" {
print(deque.count)
} else if command == "empty" {
print(deque.isEmpty ? 1 : 0)
} else if command == "front" {
print(deque.isEmpty ? -1 : deque[0])
} else if command == "back" {
print(deque.isEmpty ? -1 : deque.last!)
}
}
- 출처 : https://velog.io/@sun02/Swift-%EB%B0%B1%EC%A4%80-10866-%EB%8D%B1
728x90
'PS' 카테고리의 다른 글
[swift] 9086 - 문자열 (0) | 2022.11.25 |
---|---|
11866번 요세푸스 문제 : SWIFT (1) | 2022.10.03 |
10845번 큐 /swift (0) | 2022.10.03 |
11050번 이항계수 1 / swift (0) | 2022.10.03 |
10828번 스택 / swift (0) | 2022.10.03 |