상세 컨텐츠

본문 제목

C++ 백준 10828번

Study/C++

by Ha학생 2023. 9. 14. 15:14

본문

안녕하세요. 하학생입니다.

C++ 이론을 공부하면서 생각보다 이해가 가지 않아 방법을 바꿨습니다.

오늘부터 6주간 백준문제를 풀면서 C++에 대해 적응해 보도록 하겠습니다. 

시작합니다!!!

 


스택

 

문제를 보기 전에 스택에 대해 가볍게 설명드리겠습니다.

 

스택 구성도

스택이란 프로그래밍에서 사용되는 데이터 구조중 하나입니다.

데이터를 저장하고 접근하는 방식을 제공하고 후입선출(LIFO, Last-In-First-out) 원칙을 따릅니다.

즉 가장 최근에 추가된 요소를 제거되는 구조를 가지고 있습니다. 

 

 

문제

백준 10828번은 스택 문제입니다. 

 

고맙게도  C++에서는 스택을 지원해 주는 기능이 있어서 스택라이브러리를 이용하여 문제를 풀었습니다.

#include <iostream>
#include <stack>
#include <string>

int main(void)
{
    std::stack<int> Stack;
}

스택을 선언할 때에는 다음과 방식으로 선언해 주면 됩니다.

 

조건에 push, top, pop, size, empty 가 있는데

c++에서 제공해 주는 스택에는 기능이 다 포함되어 있습니다.

  std::stack<int> Stack;

    int N;

    std::string order;

    std::cin>>N;

    for(int i = 0; i<N;i++)
    {
        std::cin>>order;

 

스택을 선언해 줍니다.

string 형으로  order 변수와 int형으로  N변수를 정의해 주고

N을 입력받아 for문으로 N번 반복을 해줍니다.

그리고 order변수를 입력받아줍니다.

 

push

if(order=="push")
{
        int val;
        std::cin>>val;
        Stack.push(val);

}

push기능을 구현한 것입니다.

 order  변수에  push라는 값이 들어오면

val이라는 stack에 들어갈 값을 따로 입력받습니다.

 

top

 if(order=="top")
{
    if(Stack.empty()){
        std::cout<<"-1\n";
    }
    else
    {
        std::cout<<Stack.top()<<"\n";
    }
}

top 기능을 구현한 코드입니다.

top은 stack에서 가장 나중에 들어온 수를 확인해 주는 코드입니다.

문제  조건에서는  비어있으면 -1로 출력하라는 말이 있어서 

if문을 이용하여 스택이 비어있으면 -1로 출력하게 설정하고 top 한 값을 

출력하게 했습니다.

 

pop

if(order=="pop")
{
    if(Stack.empty()){
        std::cout<<"-1\n";
    }
    else
    {
        int a= Stack.top();
        Stack.pop();
        std::cout<<a<<"\n";
    }
}

pop기능을 구현한 코드입니다.

pop도 c++표준라이브러리에서 지원해 주기 때문에

top이랑 비슷하게 구현했습니다.

 

 

size, empty

if(order=="size")
{

	std::cout<<Stack.size()<<"\n";

}
else if(order=="empty")
{

	std::cout<<Stack.empty()<<"\n";
    
}

 size와 empty 기능을 구현한 코드입니다.

 

전체코드

#include <iostream>
#include <stack>
#include <string>

int main(void)
{
    std::stack<int> Stack;

    int N;

    std::string order;

    std::cin>>N;

    for(int i = 0; i<N;i++)
    {
        std::cin>>order;
        std::cout << order << "\n";
        if(order=="push")
        {
            int val;
            std::cin>>val;
            Stack.push(val);

        }else if(order=="top")
        {
            if(Stack.empty()){
                std::cout<<"-1\n";
            }
            else
            {
                std::cout<<Stack.top()<<"\n";
            }
        }else if(order=="pop")
        {
            if(Stack.empty()){
                std::cout<<"-1\n";
            }
            else
            {
                int a= Stack.top();
                Stack.pop();
                std::cout<<a<<"\n";
            }
        }else if(order=="size")
        {

            std::cout<<Stack.size()<<"\n";

        }
        else if(order=="empty")
        {
            std::cout<<Stack.empty()<<"\n";
        }
    }
    return 0;
}

 

'Study > C++' 카테고리의 다른 글

C++ 백준 1158번  (0) 2023.09.15
C++ 백준 10845번  (0) 2023.09.14
C++ 생성자 초기화 리스트, const,static변수 등등  (0) 2023.09.10
C++ 복사 생성자,소멸자  (0) 2023.09.10
C++ New,Delete, Class  (0) 2023.09.06

관련글 더보기

댓글 영역