본문 바로가기

코딩테스트/백준

[백준] 1874번 : 스택 수열

728x90
반응형


🔗 문제 링크

https://www.acmicpc.net/problem/1874


반응형
728x90

👩‍💻 코드

#include <iostream>
#include <vector>
#include <stack>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int N;
    cin >> N;
    
    vector<int> A(N, 0);
    vector<char> answer;
    stack<int> stk;
    int num = 1;
    
    for (int i=0; i<N; i++){
        cin >> A[i];
    }
    
    for (int i=0; i<N; i++){
        int a = A[i];
        
        if(a >= num){
            while (a >= num){
                stk.push(num++);
                answer.push_back('+');
            }
            
            stk.pop();
            answer.push_back('-');
        }else{
            int t = stk.top();
            stk.pop();
            
            if(t > a){
                cout << "NO";
                return 0;
            }else{
                answer.push_back('-');
            }
        }
    }
    
    for(int i=0; i<answer.size(); i++){
        cout << answer[i] << "\n";
    }
    
    return 0;
}

📝 풀이

Do it! 알고리즘 코딩테스 - C++ 편 : 기출 유형 분석부터 문제 풀이 비법까지!를 참고하였습니다.

 

현재 수열의 수가 스택에 저장할 수보다 크다면 스택에 현재 수열의 수까지 push 합니다.push가 끝나면 수열을 출력하기 위해 pop을 한 번 합니다.

 

현재 수열의 수가 스택에 저장할 수보다 작으면 스택에서 pop 합니다.만약 스택위 top이 수열의 수보다 크다면 수열을 출력할 수 없으므로 "NO"를 출력하고 return 합니다.

 

최종적으로 수열을 만들기 위한 연산이 들어 있는 answer을 출력해줍니다.

728x90
반응형

'코딩테스트 > 백준' 카테고리의 다른 글

[백준] 2164번: 카드2  (2) 2024.09.07
[백준] 17298번 : 오큰수  (0) 2024.09.06
[백준] 11003번 : 최솟값 찾기  (1) 2024.09.06
[백준] 12891번 : DNA 비밀번호  (0) 2024.09.05
[백준] 1253번 : 좋다  (1) 2024.03.04