๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/BOJ

[BOJ] ํ›„์œ„ ํ‘œ๊ธฐ์‹(1918)

[๋ฐฑ์ค€(BOJ)] ํ›„์œ„ ํ‘œ๊ธฐ์‹(1918) C++

๋ฌธ์ œ : BOJ_1918๋ฒˆ ํ›„์œ„ ํ‘œ๊ธฐ์‹

๋ฌธ์ œ ์„ค๋ช…

Stack

์ค‘์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ์˜ˆ์ œ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ด๊ฒƒ์„ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

ํ”ผ์—ฐ์‚ฐ์ž๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋งŒ ๋‚˜์˜ค๋ฉฐ, '-'๊ฐ€ ๊ฐ€์žฅ ์•ž์— ๋‚˜์˜ค๊ฑฐ๋‚˜, '*'๊ฐ€ ์ƒ๋žต๋˜๋Š” ์ž…๋ ฅ์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

stack์„ ์ƒํ™ฉ์— ๋งž๊ฒŒ ํ™œ์šฉํ•ด์„œ ํ’€์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.


Solution

์ „์ฒด ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๊ณ  ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์œผ๋กœ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค.

  • ํ”ผ์—ฐ์‚ฌ์ž๋Š” ๋ฌด์กฐ๊ฑด ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.
  • '('๊ฐ€ ๋‚˜์˜ค๋ฉด stack์— push ํ•œ๋‹ค.
  • ')'๊ฐ€ ๋‚˜์˜ค๋ฉด '('๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ stack์„ ๋น„์šฐ๋ฉฐ ์ถœ๋ ฅํ•œ ๋’ค, ๋งˆ์ง€๋ง‰ '('๋„ ์ถœ๋ ฅ ์—†์ด pop ํ•ด์ค€๋‹ค.
  • ์—ฐ์‚ฐ์ž๊ฐ€ ๋‚˜์™”์„ ๋•Œ stack์— top์— ์ž์‹ ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ๋†’์€ ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ์—ฐ์‚ฐ์ž๋ฅผ pop ํ•ด์ฃผ๊ณ  ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ๋†’์€ ์—ฐ์‚ฐ์ž๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๊ณ  '('๋‚˜ stack์ด ๋นŒ ๋•Œ๊นŒ์ง€ ๊ณ„์† pop ํ•ด์ฃผ๋‹ค๊ฐ€ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด push ํ•ด์ค€๋‹ค.

Description

  • (int i = 0; str[i] != '\0'; i++)๋กœ ์ „์ฒด ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ–ˆ์Šต๋‹ˆ๋‹ค.

#include <iostream>
#include <vector>
#include <stack>
using namespace std;
stack<char> s;
int main(void) {
    char str[101];
    cin >> str;
    stack<char> s;
    for (int i = 0; str[i] != '\0'; i++) {
        char value=str[i];
        if (value <= 'Z' && 'A' <= value) cout << value;
        else if (value == '(') s.push(value);
        else if (value == ')') {
            while (s.top() != '(') {
                cout << s.top();
                s.pop();
            }
            s.pop();
        }
        else if (s.empty()) s.push(value);
        else {
            while (!s.empty()) {
                if (s.top() == '(') {
                    s.push(value);
                    break;
                }
                else if (value == '+' || value == '-') {
                        cout << s.top();
                        s.pop();
                        continue;
                }
                else if (value == '*' || value == '/') {
                    if (s.top() == '*' || s.top() == '/') {
                        cout << s.top();
                        s.pop();
                        continue;
                    }
                    else {
                        s.push(value);
                        break;
                    }
                }
            }
            if (s.empty()) s.push(value);
        }
    }
    while (!s.empty()) {
        cout << s.top();
        s.pop();
    }
    cout << '\n';
    return 0;
}

'Algorithm > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] ์Šค๋„์ฟ (2580)  (0) 2022.03.10
[BOJ] ๋ฐฑ์กฐ์˜ ํ˜ธ์ˆ˜(3197)  (0) 2022.03.10
[BOJ] ํ–‰์šด์˜ ๋ฐ”ํ€ด(2840)  (0) 2022.03.10
[BOJ] ํšŒ์ „ํ•˜๋Š” ํ(1021)  (0) 2022.03.10
[BOJ] ์˜ค๋ฅด๋ง‰ ์ˆ˜(11057)  (0) 2022.03.09