https://www.acmicpc.net/problem/12789
우선 모든 입력을 queue를 통해 받아둔 다음에 stack자료형을 통해 만약 순서대로 처리가 가능하다면 순서대로 보내주고 아니라면 queue에 있는 값을 stack에 받고 순서대로 일경우 stack을 pop해주면 된다.
정답코드
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
int main() {
int n;
cin >> n;
queue<int> line;
stack<int> side;
int next = 1;
// 대기열 입력받기
for (int i = 0; i < n; i++) {
int x;
cin >> x;
line.push(x);
}
// 대기열 처리
while (!line.empty()) {
if (line.front() == next) {
// 대기열에서 바로 나갈 수 있을 때
line.pop();
next++;
}
else { // 대기열에서 바로 나갈 수 없을 때
if (!side.empty() && side.top() == next) {
// 스택에서 나갈 수 있는 경우
side.pop();
next++;
}
else {
// 스택에 push
side.push(line.front());
line.pop();
}
}
}
// 스택에 남아있는 사람들 처리
while (!side.empty() && side.top() == next) {
side.pop();
next++;
}
// 모두 순서대로 나갔는지 확인
if (side.empty()) {
cout << "Nice" << endl;
}
else {
cout << "Sad" << endl;
}
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준][C++]11866번. 요세푸스 문제 0 (1) | 2024.10.04 |
---|---|
[백준][C++]2164번. 카드2 (1) | 2024.10.03 |
[백준][C++]4949번. 균형잡힌 세상 (2) | 2024.10.02 |
[백준][C++]9012번. 괄호 (0) | 2024.10.02 |
[백준][C++]11478번. 서로 다른 부분 문자열의 개수 (0) | 2024.10.01 |