728x90
- 문제 사이트: https://www.acmicpc.net/problem/12789
줄 서 있는 학생들은 queue 형태로 이동하고, 임시 공간에 서는 학생은 stack 형태로 이동한다.
이에 맞게 아래의 로직을 구현해주면 된다.
1) 비교할 수 있도록 현재 순서를 저장 (order)
2) 임시 공간 (stack) 가장 위의 학생이 현재 순서와 일치하는지 확인
3-1) 줄 서 있는 (queue) 가장 앞의 학생이 현재 순서와 일치한다면, 다음 학생 확인: order++
3-2) 줄 서 있는 (queue) 가장 앞의 학생이 현재 순서와 일치하지 않는다면, 임시 공간에 학생 이동
4) 비교 가능한 학생이 없는 경우, 종료
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
int main()
{
int N, n;
queue<int> student;
stack<int> waiting;
cin >> N;
for (int i = 0; i < N; i++)
{
cin >> n;
student.push(n);
}
int order = 1;
while (true)
{
if (!waiting.empty() && waiting.top() == order)
{
waiting.pop();
order++;
}
else if (!student.empty())
{
if (student.front() == order)
{
student.pop();
order++;
}
else
{
n = student.front();
student.pop();
waiting.push(n);
}
}
else
{
break;
}
}
if (student.empty() && waiting.empty())
cout << "Nice";
else
cout << "Sad";
return 0;
}
- 메모리: 2024 KB
- 시간: 0 ms
- 코드 길이: 933 B
728x90
'Algorithm > BackJoon' 카테고리의 다른 글
1373번: 2진수 8진수 (0) | 2023.09.05 |
---|---|
10820번: 문자열 분석 (0) | 2023.09.04 |
11659번: 구간 합 구하기 4 (0) | 2023.09.01 |
2851번: 슈퍼 마리오 (0) | 2023.08.31 |
5337번: 웰컴 (0) | 2023.07.11 |
댓글