๐Ÿ•๏ธ 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;
}
๋ฐ˜์‘ํ˜•