티스토리 뷰

반응형

https://www.acmicpc.net/problem/10828

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 자료 구조
  • 스택

 


 

⊙ 문제 접근 과정

 

case로 구현하려 했는데 c++로는 쉽지 않아서 if문으로 해결했다.

 

혹시 stack을 C++에서 어떻게 사용하는지 헷갈려하는 분들을 위해 아래에 정리해놨다!


STACK

 

STACK은 LIFO이다. LIFO는 LAST IN FIRST OUT, 즉 나중에 들어온 원소가 가장 먼저 나가는 구조다.

 

C++에서 사용하는 법은 아래와 같다.

 

 

#include <stack> // 인클루드 해준다.

int main() {
	stack<int> s; // stack s를 생성해준다.
}

 

  • s.empty() : 비어있는지 확인
  • s.size() : 원소 수를 반환
  • s.top() : 맨 위의 원소 리턴
  • s.push(n) : 맨 위에 원소 n을 추가
  • s.pop() : 맨 위의 원소 삭제

 

 


 

 

⊙ 문제 풀이

 

#include <iostream>
#include <stack>

using namespace std;

stack<int> s;
string c;
int N,X;

int main() {
    cin >> N;

    for(int i=0;i<N;i++) {
        cin >> c;

        if(c=="push") {
            cin >> X;
            s.push(X);
        } else if(c=="top") {
            if(s.empty()) cout << "-1\n";
            else cout << s.top() << "\n";
        } else if(c=="pop") {
            if(s.empty()) cout << "-1\n";
            else {
                cout << s.top() << "\n";
                s.pop();
            }
        } else if (c=="empty") {
            cout << s.empty() << "\n";
        } else cout << s.size() << "\n";
    }
}

⊙ 결과

 


⊙ 마무리

 

 

NONE

 

좋아요 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함