πŸ•οΈ ICPC Sinchon/Linear Data Structure

[BOJ][C++] λ°±μ€€ 1918번: ν›„μœ„ ν‘œκΈ°μ‹

선달 2023. 5. 24. 23:29
λ°˜μ‘ν˜•

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

 

1918번: ν›„μœ„ ν‘œκΈ°μ‹

첫째 쀄에 μ€‘μœ„ ν‘œκΈ°μ‹μ΄ 주어진닀. 단 이 μˆ˜μ‹μ˜ ν”Όμ—°μ‚°μžλŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ‘œ 이루어지며 μˆ˜μ‹μ—μ„œ ν•œ λ²ˆμ”©λ§Œ λ“±μž₯ν•œλ‹€. 그리고 -A+B와 같이 -κ°€ κ°€μž₯ μ•žμ— μ˜€κ±°λ‚˜ AB와 같이 *κ°€ μƒλž΅λ˜λŠ” λ“±μ˜

www.acmicpc.net

 

풀이

ν”Όμ—°μ‚°μžλŠ” λ°”λ‘œ λ‹΅ λ¬Έμžμ—΄μ— λ„£λŠ”λ‹€.

μ—°μ‚°μžλŠ” μŠ€νƒμ— λ„£μ–΄μ„œ κ΄€λ¦¬ν•œλ‹€.

 

λ‹«νžŒ κ΄„ν˜Έκ°€ λ‚˜μ˜€λ©΄

μŠ€νƒ 내에 μ—΄λ¦° κ΄„ν˜Έκ°€ λ‚˜μ˜¬ λ•ŒκΉŒμ§€ μŠ€νƒμ— μžˆλŠ” μ—°μ‚¬μžλ“€μ„ λ½‘μ•„μ„œ λ‹΅ λ¬Έμžμ—΄μ— λ„£λŠ”λ‹€.

 

μ—°μ‚°μžλ₯Ό μŠ€νƒμ— 넣을 λ•Œ μŠ€νƒ λ‚΄ μ—°μ‚°μžκ°€ ν˜„μž¬ μ—°μ‚°μžλ³΄λ‹€ μš°μ„ μˆœμœ„κ°€ λ†’κ±°λ‚˜ κ°™λ‹€λ©΄

μŠ€νƒμ— μžˆλŠ” μ—°μ‚°μžλ₯Ό λ‹€ λ½‘μ•„μ„œ λ‹΅ λ¬Έμžμ—΄μ— λ„£λŠ”λ‹€

#include <iostream>
#include <stack>

using namespace std;

int priority(char c) {
    if(c=='*' || c=='/') return 1;
    if(c=='+' || c=='-') return 2;
    if(c=='(' || c==')') return 3;
    return 0;
}

int main() {
    stack<char> op;
    string ans = "";
    
    string input;
    cin >> input;
    
    for(char i : input) {
        if(priority(i)==0) { // ν”Όμ—°μ‚°μž
            ans += i;
        } else if(i=='(') {
            op.push(i);
        } else if(i==')') {
            while(!op.empty() && op.top()!='(') {
                ans += op.top();
                op.pop();
            }
            op.pop();
        } else { // μ—°μ‚°μž *,/,+,-
            while(!op.empty() && priority(op.top()) <= priority(i)) {
                ans += op.top();
                op.pop();
            }
            op.push(i);
        }
    }
    while(!op.empty()) {
        ans += op.top();
        op.pop();
    }
    
    cout << ans;
}
λ°˜μ‘ν˜•