728x90
분류
자료 구조, 구현, 스택
문제 설명
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
풀이 방법
1. 주어진 명령의 수 n개만큼 명령어를 입력 받을 수 있게 해야 한다.
2. 명령어에 따라 다른 동작을 수행해야 한다.
코드
///
/// 백준 스택 10828번 문제
/// https://www.acmicpc.net/problem/10828
/// 날짜: 2024.05.10
///
///
import Foundation
// 빈 Int 배열 생성
var stack = [Int]()
// n수 만큼 명령의 수 입력
let input = readLine()!
let n = Int(input) ?? 0
// 명령어 입력
for _ in 1...n {
let command: String? = readLine()
// 명령어에 따른 스택 동작
if command?.contains("push") == true {
let numbers = command?.compactMap { $0.wholeNumberValue }.map(String.init).joined() ?? ""
stack.append(Int(numbers) ?? 0)
} else if command?.contains("pop") == true {
if !stack.isEmpty {
print(stack.last ?? 0)
stack.removeLast()
} else {
print("-1")
}
} else if command?.contains("size") == true {
print(stack.count)
} else if command?.contains("empty") == true {
stack.isEmpty ? print("1") : print("0")
} else if command?.contains("top") == true {
print(stack.last ?? -1)
}
}
용어 정리
- readLine(): 콘솔창에서 입력 받은 값을 문자열로 반환한다.
- contains(): 내부에 지정된 요소 값이 있는지 찾는다, Bool값을 반환한다
- compactMap(): 요소의 조건에 맞는 non-nil인 배열 값을 반환한다.
- wholeNumberValue: 문자가 갖고 있는 숫자값을 반환한다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/Silver II] 스택 수열 - 1874 (0) | 2024.05.14 |
---|---|
[백준/Silver IV] 괄호 - 9012 (0) | 2024.05.13 |
[백준/Bronze I] 단어 뒤집기 - 9093 (0) | 2024.05.11 |
백준 1110번 더하기 사이클 (0) | 2023.01.15 |
백준 1978번 소수찾기 (0) | 2023.01.15 |