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
                            
                        
                          
                          - 리소스모니터링
 - javascript
 - spring boot
 - html
 - NIO
 - set
 - List
 - JPA
 - union_find
 - map
 - Union-find
 - alter
 - Properties
 - 스프링부트
 - date
 - CSS
 - scanner
 - 힙덤프
 - deque
 - math
 - Calendar
 - 스택
 - priority_queue
 - 큐
 - Java
 - string
 - dfs
 - BFS
 - GC로그수집
 - sql
 
                            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 |