ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
์ ์๋ฅผ ์ ์ฅํ๋ ์คํ์ ๊ตฌํํ ๋ค์, ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๋ช ๋ น์ ์ฒ๋ฆฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋ช ๋ น์ ์ด ๋ค์ฏ ๊ฐ์ง์ด๋ค.
- push X: ์ ์ X๋ฅผ ์คํ์ ๋ฃ๋ ์ฐ์ฐ์ด๋ค.
- pop: ์คํ์์ ๊ฐ์ฅ ์์ ์๋ ์ ์๋ฅผ ๋นผ๊ณ , ๊ทธ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ์คํ์ ๋ค์ด์๋ ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
- size: ์คํ์ ๋ค์ด์๋ ์ ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
- empty: ์คํ์ด ๋น์ด์์ผ๋ฉด 1, ์๋๋ฉด 0์ ์ถ๋ ฅํ๋ค.
- top: ์คํ์ ๊ฐ์ฅ ์์ ์๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ์คํ์ ๋ค์ด์๋ ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฃผ์ด์ง๋ ๋ช ๋ น์ ์ N (1 ≤ N ≤ 10,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๋ช ๋ น์ด ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์ฃผ์ด์ง๋ ์ ์๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค. ๋ฌธ์ ์ ๋์์์ง ์์ ๋ช ๋ น์ด ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
์ถ๋ ฅํด์ผํ๋ ๋ช ๋ น์ด ์ฃผ์ด์ง ๋๋ง๋ค, ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
๋จ์ํ ์คํ์ ๊ตฌํํด๋ณด๋ ๋ฌธ์ ์ ๋๋ค.์คํ์ FIFO ๋ฐฉ์์ ๋ฐ๋ฅด๋ ์๋ฃ๊ตฌ์กฐ๋ก ํ๋ง๊ธ์ค๋ฅผ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค!(ํท๊ฐ๋ฆฌ์ ๋ค๋ฉด ์ ๊ฐ ์ค๋ช ํ ๊ธ ์ฐธ๊ณ ํด์ฃผ์ธ์~)
Swift์์๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ง์ํด์ฃผ์ง ์์ง๋ง C++์์๋ ์ง์์ ํด์ฃผ๊ธฐ ๋๋ฌธ์Swift์ C++, ๋ ๊ฐ์ ์ธ์ด๋ก ๊ตฌํ์ ํด๋ณด์์ต๋๋ค.
Stack์ ๋ฐฐ์ด์ ๋ง์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ฃผ๋ก ๋ค๋ฃจ๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ ๋ฉ์๋์ ์๊ฐ๋ณต์ก๋๋ O(1) ์์์๊ฐ์ ๊ฐ์ต๋๋ค.
ํ์ด ์์
1. Swift์ ๊ฒฝ์ฐ Stack์ ๊ตฌ์กฐ์ฒด๋ก ๋ง๋ค์ด์ฃผ๊ณ , C++์ ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ง์ํด์ฃผ๋ Stack์ ์ ์ํด์ค๋๋ค.
2. ๋ฌธ์ ์์ ์๊ตฌํ๋ ๊ฐ์ ์กฐ๊ฑด์ ๋ง๊ฒ ์ฝ์์ ์ถ๋ ฅํด์ค๋๋ค.
ํ์ด ์ฝ๋
< Swift>
// Stack ๊ตฌํ
struct Stack {
var stack = [Int]()
mutating func push(n: Int) {
stack.append(n)
}
mutating func pop() -> Int {
return stack.popLast() ?? -1
}
func getSize() -> Int {
stack.count
}
func isEmpty() -> Int {
stack.isEmpty ? 1 : 0
}
func top() -> Int {
stack.last ?? -1
}
}
// ๋ฌธ์ ๊ตฌํ๋ถ
var list = Stack()
let n = Int(readLine()!)!
for _ in 1...n {
let cmd = readLine()!
switch cmd {
case "pop":
print(list.pop())
case "size":
print(list.getSize())
case "empty":
print(list.isEmpty())
case "top":
print(list.top())
default:
let arr = cmd.split(separator: " ")
let num = Int(String(arr.last!))!
list.push(n: num)
}
}
< C++>
#include <bits/stdc++.h>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
stack<int> S; // stack ์์ฑ
int n;
cin >> n;
while(n--){ // n๋ฒ ๋ฐ๋ณต
string c;
cin >> c;
if(c=="push"){
int n;
cin >> n;
S.push(n);
}
else if(c=="pop"){
if(S.empty()) cout << -1 << '\n';
else{
cout << S.top() << '\n';
S.pop();
}
}
else if(c=="size") {
cout << S.size() << '\n';
}
else if(c=="empty"){
cout << int(S.empty()) << '\n';
}
else{
if(S.empty()) cout << -1 << '\n';
else{
cout << S.top() << '\n';
}
}
}
}
๋ง๋ฌด๋ฆฌ
stack์ ์๋ฃ๊ตฌ์กฐ ์ธก๋ฉด์ผ๋ก๋ง ๊ณต๋ถํด๋ณด์๊ณ , ์ด๋ฒ์ ์ฒ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์์ต๋๋ค.
์ฒ์์ด๋ผ ๊ทธ๋ฐ์ง stack์ ์์ ํ ๊ตฌ์กฐ์ฒด๋ก ์์ฑํ๊ณ ํ์ด์ ์ด์ฉํ๋๋ฐ, ์์ผ๋ก๋ ์ด๋ ๊ฒ ํ ํ์๊ฐ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ฝ๋ ์์ฑ์ ์๊ฐ์ ๋จ์ถํด์ผ ํ๋ ํ ์คํธ์ ๊ฒฝ์ฐ, ์์ ํ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ง ์๊ณ ๊ฐ๋ ๋ง์ ๊ณ ๋ คํ์ฌ ์ฝ๋๋ฅผ ๊ฐ๋จํ๊ฒ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๋ ๋๋ถ๋ถ์ด ์คํ์ ์์ ํ ๊ตฌํํ์ง ์๊ณ ๊ฐ๋ ๋ง์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
๋ํ, ์์ผ๋ก C++ ์ธ์ด๋ ํจ๊ป ๊ณต๋ถํ๊ณ ์ ํฉ๋๋ค.
์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ง์ํด์ฃผ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ์ธ์ด์ ์ธก๋ฉด์์๋ ๊ณต๋ถ๋ฅผ ํด๋ณด๋ฉด ๋์์ ๋ฐ์ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
'Coding Test > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 10845๋ฒ - ํ (Swift, C++) (0) | 2024.02.23 |
---|---|
[BOJ] 10773๋ฒ - ์ ๋ก (Swift, C++) (0) | 2024.02.22 |
[BOJ] 5397๋ฒ - ํค๋ก๊ฑฐ (Swift, C++) (0) | 2024.02.21 |
[BOJ] 1475๋ฒ - ๋ฐฉ ๋ฒํธ (Swift) (0) | 2024.02.13 |
[BOJ] 10808๋ฒ - ์ํ๋ฒณ ๊ฐ์ (Swift) (1) | 2024.02.13 |
- ์ ๋ง๋๊ธฐ
- 5397
- containerView
- ๊ณต๊ฐ ๋ณต์ก๋
- ์คํ
- tipkit
- ๋ฒ์ฉ๊ณ ์ ์๋ณ
- 2023๋ ํ๊ณ
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- 4949
- gitkraken
- root view controller
- ์๋ฃ ๊ตฌ์กฐ
- ์์ด ๊ณต๋ถ
- 2024๋ ๋ชฉํ
- BOJ
- Container View Controller
- ๊ดํธ์ ๊ฐ
- remainder
- Anyobject
- ๊ท๋๋ผ๋ฏธ ์์ด
- ๊ท ํ์กํ ์ธ์
- ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- Swift
- C++
- 10808
- ํ
- ์์ด ๋ด์ค
- pageViewController
- ๊ท๋๋ผ๋ฏธ ์์ด
- Total
- Today
- Yesterday