안녕하세요. 하학생입니다.
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변수를 입력받아줍니다.
if(order=="push")
{
int val;
std::cin>>val;
Stack.push(val);
}
push기능을 구현한 것입니다.
order 변수에 push라는 값이 들어오면
val이라는 stack에 들어갈 값을 따로 입력받습니다.
if(order=="top")
{
if(Stack.empty()){
std::cout<<"-1\n";
}
else
{
std::cout<<Stack.top()<<"\n";
}
}
top 기능을 구현한 코드입니다.
top은 stack에서 가장 나중에 들어온 수를 확인해 주는 코드입니다.
문제 조건에서는 비어있으면 -1로 출력하라는 말이 있어서
if문을 이용하여 스택이 비어있으면 -1로 출력하게 설정하고 top 한 값을
출력하게 했습니다.
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이랑 비슷하게 구현했습니다.
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;
}
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 |
댓글 영역