1string = list(input())
 2
 3priority = {'(':0, ')':0, '+':1, '-':1, '*':2, '/':2}
 4operator = []
 5result = ''
 6
 7for c in string:
 8    if c.isalpha():
 9        result += c
10    elif c == '(':
11        operator.append(c)
12    elif c == ')':
13        while operator:
14            op = operator.pop()
15            if op == '(':
16                break
17            result += op
18    else:
19        if operator:
20            if priority[operator[-1]] < priority[c]:
21                operator.append(c)
22            else:
23                while operator and priority[operator[-1]] >= priority[c]:
24                    result += operator.pop()
25                operator.append(c)
26        else:
27            operator.append(c)
28while operator:
29    result += operator.pop()
30
31print (result)

๋ฌธ์ œ

  • ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ž…๋ ฅ๋œ ์ˆ˜์‹์„ ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.
  • ์˜ˆ์ œ
    • ์ž…๋ ฅ : A+B*C-D/E
    • ์ถœ๋ ฅ : ABC*+DE/-

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด์„ ๋ฆฌ์ŠคํŠธ์— ๋‹ด๊ธด ๋ฌธ์ž๋ณ„๋กœ ์ˆœํšŒํ•œ๋‹ค.
  1. ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ ์•ŒํŒŒ๋ฒณ์ธ ๊ฒฝ์šฐ : ๋ฐ”๋กœ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์— ๋”ํ•œ๋‹ค
  2. ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ ์—ฌ๋Š” ๊ด„ํ˜ธ์ธ ๊ฒฝ์šฐ : stack์— pushํ•œ๋‹ค
  3. ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ ๋‹ซ๋Š” ๊ด„ํ˜ธ์ธ ๊ฒฝ์šฐ : ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ฌ๋•Œ๊นŒ์ง€ stack์„ popํ•œ๋‹ค
  4. ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ ์—ฐ์‚ฐ์ž์ธ ๊ฒฝ์šฐ (+, -, *, /)
    • ์Šคํƒ์˜ top์— ์žˆ๋Š” ์—ฐ์‚ฐ์ž์™€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ,
    • top์— ์žˆ๋Š” ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ํ•ด๋‹น ์—ฐ์‚ฐ์ž๋ณด๋‹ค ์ž‘์„๋•Œ๊นŒ์ง€ popํ•œ๋‹ค
  • ์Šคํƒ์˜ ๋‚จ์€ ์—ฐ์‚ฐ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.