실버 문제 처음 풀어보았다.
친구들과 알고리즘 스터디를 하는데, 골드 문제 푼 친구의 코드 설명을 듣고 실버 정도는 도전해도 좋겠단 생각이 들었다.
벡터를 열심히 연습하고자 스택 문제에 벡터를 써서 접근했다.
https://www.acmicpc.net/problem/28278
우선.. 스택은 접시 쌓기 처럼 맨 처음에 넣은 요소가 맨 밑바닥이 된다는 것을 기억해야 했다.
시간 초과한 나의 코드
#include <iostream>
#include <vector>
using namespace std;
vector <int> stack{};
//--------------------------------------------------------
void Pop2()
{
if (stack.size() == 0)
cout << -1 << endl;
// 정수가 있다면 맨 위 정수 빼고 출력
else
{
cout << stack.back() << endl;
stack.pop_back();
}
}
void CheckSize3()
{
cout << stack.size() << endl;
}
void CheckEmpty4()
{
if (stack.size() == 0)
cout << 1 << endl;
else
cout << 0 << endl;
}
void CheckNum5()
{
// 정수가 있다면 맨 위 정수 출력
if (stack.size() != 0)
cout << stack.back() << endl;
else
cout << -1 << endl;
}
//---------------------------------------------------
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int N; // 명령의 수
cin >> N;
int orderNum {};
int cnt{};
int temp{};
while (cnt < N)
{
cin >> orderNum;
++cnt;
switch (orderNum)
{
case 1:
cin >> temp;
stack.push_back(temp);
break;
case 2:
Pop2();
break;
case 3:
CheckSize3();
break;
case 4:
CheckEmpty4();
break;
case 5:
CheckNum5();
break;
default:
break;
}
};
return 0;
}
띠발.... 2시간동안 시간 초과 때문에 고민하다가 질문게시판을 보니까 endl이 느리니까 \n을 쓰라는 조언을 보고는 바로 아래와 같이 고치고 통과했다.
새로 고친 통과 코드
#include <iostream>
#include <vector>
std::vector <int> stack{};
//--------------------------------------------------------
void Pop2()
{
if (stack.size() == 0)
std::cout << -1 << "\n";
// 정수가 있다면 맨 위 정수 빼고 출력
else
{
std::cout << stack.back() << "\n";
stack.pop_back();
}
}
void CheckSize3()
{
std::cout << stack.size() << "\n";
}
void CheckEmpty4()
{
if (stack.size() == 0)
std::cout << 1 << "\n";
else
std::cout << 0 << "\n";
}
void CheckNum5()
{
// 정수가 있다면 맨 위 정수 출력
if (stack.size() != 0)
std::cout << stack.back() << "\n";
else
std::cout << -1 << "\n";
}
//---------------------------------------------------
int main()
{
std::ios::sync_with_stdio(0);
std::cin.tie(0);
int N; // 명령의 수
std::cin >> N;
int orderNum {};
int cnt{};
int temp{};
while (cnt < N)
{
std::cin >> orderNum;
++cnt;
switch (orderNum)
{
case 1:
std::cin >> temp;
stack.push_back(temp);
break;
case 2:
Pop2();
break;
case 3:
CheckSize3();
break;
case 4:
CheckEmpty4();
break;
case 5:
CheckNum5();
break;
default:
break;
}
};
return 0;
}
'백준' 카테고리의 다른 글
[스택, 배열] 28278 : 스택2 (1) | 2023.09.13 |
---|---|
[스택] 10773, 벡터 사용한 스택 (0) | 2023.09.08 |
공백 입력..!! (0) | 2023.08.08 |
(2562번)최댓값 찾고 몇 번째 숫자인지 찾기 (2) | 2023.04.19 |
[버블정렬 & 벡터] 10818번 문제 (0) | 2023.04.19 |