ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฌธ์ œ

์ •์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ์Šคํƒ์„ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๋ช…๋ น์€ ์ด ๋‹ค์„ฏ ๊ฐ€์ง€์ด๋‹ค.

  • push X: ์ •์ˆ˜ X๋ฅผ ์Šคํƒ์— ๋„ฃ๋Š” ์—ฐ์‚ฐ์ด๋‹ค.
  • pop: ์Šคํƒ์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ๋นผ๊ณ , ๊ทธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • size: ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • empty: ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด 1, ์•„๋‹ˆ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • top: ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

<๋ฌธ์ œ ๋งํฌ>

 

10828๋ฒˆ: ์Šคํƒ

์ฒซ์งธ ์ค„์— ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์˜ ์ˆ˜ N (1 ≤ N ≤ 10,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ช…๋ น์ด ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ์ •์ˆ˜๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋ฌธ์ œ์— ๋‚˜์™€์žˆ์ง€

www.acmicpc.net


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์˜ ์ˆ˜ 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++ ์–ธ์–ด๋„ ํ•จ๊ป˜ ๊ณต๋ถ€ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ง€์›ํ•ด์ฃผ๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์–ธ์–ด์  ์ธก๋ฉด์—์„œ๋„ ๊ณต๋ถ€๋ฅผ ํ•ด๋ณด๋ฉด ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.