https://www.acmicpc.net/problem/1874
1874번: 스택 수열
1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.
www.acmicpc.net
걸린 시간 : 30분 42초
if 문 안에 while 문을 중첩시키려고 해서 많은 오류를 겪었다.
처음부터 코드를 치려고 하지 말고 생각이 정리된 상태로 코드를 쳐야겠다.
알고리즘은 간단하다. 수를 입력받고, 2가지 행동 중 하나를 하면 된다.
- 만약 현재 수 (num) 보다 크다면 스택에 그때까지 계속 push 하면 된다.
- 만약 현재 수 (num) 보다 작거나 같다면 pop하면 된다. 단, top 과 비교해서 일치하지 않는다면 불가능한 경우가 된다.
#include <bits/stdc++.h>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
stack<int> s;
int num = 1;
string answer = "";
for (int i = 0; i < n; i++) {
int target;
cin >> target;
while (num <= target) {
s.push(num++);
answer += "+\n";
}
if (s.top() == target) {
s.pop();
answer += "-\n";
}
else {
cout << "NO";
return 0;
}
}
cout << answer;
return 0;
}
'Baekjoon Online Judge' 카테고리의 다른 글
[BOJ] 28303: 자석 (C++) (0) | 2023.08.21 |
---|---|
[BOJ] 1780 : 종이의 개수 (C++) with 분할 정복 (0) | 2023.08.17 |
[BOJ] 1912: 연속합 (C++) with 누적합 (0) | 2023.08.16 |
[BOJ] 2644: 촌수계산 (C++) (0) | 2023.08.06 |
[BOJ] 4963 : 섬의 개수 (C++) with DFS (0) | 2023.08.06 |