BOJ-10828, 스택
문제 📑
https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
문제 정리 ▾
- 처음 명령어의 개수가 입력되고, 각각의 명령어가 입력이 되었을 때 명령어에 맞는 결과를 출력하면 된다.
- push: 스택에 값을 넣는 명령어
- pop: 스택 가장 위에 있는 정수 출력 및 제거, 비어있을 경우 -1 출력
- size: 스택의 사이즈 출력
- empty: 스택이 비어있으면 1, 아니면 0 출력
- top: 스택 가장 위에 값 출력, 비어있을 경우 -1 출력
접근 🚶🏻
나의 생각 ▾
- 스택은 학교에서도 많이 다뤘던 부분이라 주어진 조건에 맞춰 함수로 구현하면 된다고 생각했다.
나의 해결 ▾
import Foundation
var stack = [Int]()
func solution() {
let cnt = Int(readLine()!)!
for _ in 1...cnt {
let value = readLine()!.split(separator: " ").map{ String($0) }
switch value[0] {
case "push":
push(Int(value[1])!)
break
case "pop":
print(pop())
break
case "size":
print(size())
break
case "empty":
print(empty())
break
case "top":
print(top())
break
default:
break
}
}
}
func push(_ value: Int) {
stack.append(value)
}
func pop() -> Int {
if let pop = stack.popLast() {
return pop
} else {
return -1
}
}
func top() -> Int{
if let topValue = stack.last {
return topValue
} else {
return -1
}
}
func size() -> Int{
let size = stack.count
return size
}
func empty() -> Int{
if stack.isEmpty {
return 1
} else {
return 0
}
}
solution()
- 코드에 관한 내용은 밑에서 살펴보자
코드 리뷰 ▾
var stack = [Int]()
func solution() {
let cnt = Int(readLine()!)!
for _ in 1...cnt {
let value = readLine()!.split(separator: " ").map{ String($0) }
switch value[0] {
case "push":
push(Int(value[1])!)
break
case "pop":
print(pop())
break
case "size":
print(size())
break
case "empty":
print(empty())
break
case "top":
print(top())
break
default:
break
}
}
}
- stack이라는 Int형 배열을 전역 변수로 선언하여 다른 함수에서도 접근할 수 있게 하였다.
- cnt라는 변수에 명령어의 개수를 넣어주었다.
- 그 후 cnt 횟수만큼 for문을 돌려 입력을 받게 하며, push 1처럼 명령어를 받을 경우가 있어 value로 배열로 값을 넣을 수 있게 구현하였다.
- value[0]의 값을 통해 switch문으로 각각의 경우를 나눠 함수들을 호출시켰다.
func push(_ value: Int) {
stack.append(value)
}
- push는 들어오는 값을 stack이라는 배열에 넣어주었다.
func pop() -> Int {
if let pop = stack.popLast() {
return pop
} else {
return -1
}
}
- if let 문을 사용해 stack.last가 있을 경우 popLast()로 마지막 값을 제거해주며, pop값을 반환해준다.
- 비어있을 경우는 -1을 출력해주었다.
func top() -> Int{
if let topValue = stack.last {
return topValue
} else {
return -1
}
}
- top은 pop과 비슷한 결로 if let을 통해 비어있는지 체크를 하여 각각의 값을 반환해주었다.
func size() -> Int{
let size = stack.count
return size
}
- size는 말 그대로 stack 배열의 사이즈를 반환해주면 끝!
func empty() -> Int{
if stack.isEmpty {
return 1
} else {
return 0
}
}
- empty는 stack 배열이 비어있는지 체크하여 각각의 케이스에 맞는 값을 반환해주었다.
Additional 📂
- 이번 10828번 문제를 통해 stack을 더 견고히 다지는 계기가 되었다.
- 알고리즘 기초부터 풀어보고 있는데 아직까진 어렵지 않다.
- 앞으로도 평화롭게 알고리즘을 풀어갔으면 좋겠다...🥲
'Algorithm.zip' 카테고리의 다른 글
[Swift]BOJ-9012 (0) | 2022.01.31 |
---|---|
[Swift]BOJ-9093 (0) | 2022.01.31 |
[Swift]BOJ-10815 (0) | 2022.01.29 |
[Swift]BOJ-1158 (0) | 2022.01.27 |
[Swift]BOJ-1920 (0) | 2022.01.26 |