Algorithm πŸ§‘πŸ»‍πŸ’»/λ°±μ€€(BOJ)

[λ°±μ€€,c++] 1874번 - μŠ€νƒ μˆ˜μ—΄

dkswnkk 2022. 3. 9. 01:15

문제

 

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

 

μ½”λ“œ

#include <iostream>
#include <stack>
#include <vector>

using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int N; cin>>N;
    stack<int>st;
    vector<char> ans;
    
    int curr = 0;
    while(N--){
        int num; cin>>num;
        
        if(st.empty()){
            if(curr>num){
                cout<<"NO";
                return 0;
            }
            int first = curr;
            for(int i=0; i<abs(num-first); i++){
                ans.push_back('+');
                st.push(++curr);
            }
            ans.push_back('-');
            st.pop();
        }
        
        else if(st.top()==num){
            ans.push_back('-');
            st.pop();
        }
        
        else if(st.top()>num){
            while(true){
                if(st.top()==num) break;
                ans.push_back('-');
                st.pop();
            }
        }
        else if(st.top()<num){
            if(curr>num){
                cout<<"NO";
                return 0;
            }
            while(true){
                if(st.top()==num){
                    ans.push_back('-');
                    st.pop();
                    break;
                }
                ans.push_back('+');
                st.push(++curr);
            }
        }
    }
    for(char c: ans) cout<<c<<'\n';
}

 

풀이

μ½”λ“œ κ΅¬ν˜„ μžμ²΄λŠ” μ–΄λ ΅μ§€ μ•ŠμœΌλ‚˜ 이 문제λ₯Ό 처음 λ³΄μ•˜μ„ λ•Œ 문제 μžμ²΄κ°€ 이해가 κ°€μ§€λ₯Ό μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μž…μΆœλ ₯을 보고 λŒ€μΆ© μ˜ˆμƒμ€ ν•΄μ„œ ν’€μ–΄λ³΄μ•˜μ§€λ§Œ 무언가 잘λͺ»λ˜μ—ˆλŠ”μ§€ μ±„μ ν–ˆμ„ λ•ŒλŠ” μ˜€λ‹΅μ΄ λ–΄κ³  κ·Έλ ‡κ²Œ λ―Έμ³κ°€λ˜ 도쀑 질문 κ²Œμ‹œνŒμ—μ„œ μ•„λž˜ 문제 μ„€λͺ… μ˜μƒμ„ μ°Ύμ•„μ„œ 보게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μœ„ μ˜μƒμ΄ μ—†μ—ˆμœΌλ©΄ 아직도 문제 이해쑰차 λͺ»ν–ˆμ„ κ²ƒμž…λ‹ˆλ‹€.(μ œμž‘μž λΆ„κ»˜ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.)  문제 이해가 κ°€μ§€ μ•ŠμœΌμ‹  뢄듀은 ν•œλ²ˆ μ‹œμ²­ν•˜μ‹œλ©΄ 이해가 λ°”λ‘œ 될 것 κ°™μŠ΅λ‹ˆλ‹€.