250x250
Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- dfs
- CSS
- JPA
- Union-find
- date
- set
- Java
- List
- GC로그수집
- 리소스모니터링
- 스택
- 스프링부트
- NIO
- math
- scanner
- sql
- BFS
- alter
- html
- 힙덤프
- deque
- map
- union_find
- priority_queue
- 큐
- Calendar
- Properties
- spring boot
- javascript
- string
Archives
- Today
- Total
매일 조금씩
백준 1874번: 스택 수열 본문
728x90
반응형
스택과 큐를 활용한 문제이다.
여러가지 예외만 잘처리해주면 쉬운 문제였다.
중요 포인트
- 실행 중간에 불가능이 나오면 "NO"만 출력해야한다.
- 결과를 한번에 출력해야하는데 역순 출력이 아니므로 stack이 아닌 queue에 출력할 연산들을 담는다.
- push되는 숫자는 1부터 오름차순이고, pop된 숫자는 다시 push 안됨. (push 되는 숫자를 따로 두지 않고 stack의 용량과 같은 값으로 두면 에러가남) 여기선 num으로 둔다.
- s.top()과 inp을 비교햇을 때, top이 더 크면 불가능 (pop은 입력된 숫자와 같은 숫자만 가능하기때문)
- s.top()이 inp값보다 작을 땐, 같거나 커질 때 까지 push(num) 해주는데 그때마다 num++; 한다.
- 5번에서 크면 불가능, 같으면 pop한다.
#include <iostream>
#include <string>
#include <stack>
#include <queue>
using namespace std;
int n;
int main(void) {
ios_base::sync_with_stdio(0);
cin.tie(0); //cin 실행속도 향상
stack<int> s;
queue<string> t;
cin >> n;
int num = 1;
bool possible = true;
for(int i = 0; i < n; i++){
int inp = 0;
cin >> inp;
if (!s.empty()) {
if (s.top() > inp) {
possible = false;
break;
}
}
while (s.empty()||s.top() < inp) {
s.push(num);
num++;
t.push("+");
}
if (s.top() == inp) {
s.pop();
t.push("-");
}
else {
possible = false;
break;
}
}
int p = t.size();
if (possible) {
for (int i = 0; i < p; i++) {
cout << t.front() << "\n";
t.pop();
}
}
else
cout << "NO" << "\n";
return 0;
}
728x90
반응형
'알고리즘' 카테고리의 다른 글
백준 2164번: 카드 2 (0) | 2020.04.07 |
---|---|
백준 18258번: 큐 2 (0) | 2020.04.07 |
백준 4949번: 균형잡힌 세상 (0) | 2020.04.05 |
백준 9012번: 괄호 (0) | 2020.04.05 |
백준 10773번: 제로 (0) | 2020.04.05 |