[BOJ] 1918 ํ์ ํ๊ธฐ์ (Python / ํ์ด์ฌ)
๐งท ๋ฌธ์
https://www.acmicpc.net/problem/1918
์ฃผ์ด์ง ์ค์ ํ๊ธฐ์(infix)์ ํ์ ํ๊ธฐ์(postfix)๋ก ๋ฐ๊พธ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ์ ๋์์๋ค์ํผ ์ฐ์ฐ์์ ์ฐ์ ์์์ ๋ฐ๋ผ ์คํ์์ push, pop์ ๊ณผ์ ์ ํตํด ํด๊ฒฐํ ์ ์๋ค.
๐ ํ์ด
์ด ๋ฌธ์ ์ ์ค์ํ ํฌ์ธํธ๋ ์ฐ์ฐ์์ ์ฐ์ ์์๋ฅผ ๋น๊ตํ ๋, ์ฐ์ ์์๊ฐ ๊ฐ๋ค๋ฉด stack
์์ ๋ค์ด์๋, ์ฆ ์์์ ์ผ์ชฝ์ ์์นํ ์ฐ์ฐ์๋ฅผ ์ฒ๋ฆฌํด์ค๋ค๋ ๊ฒ์ด๋ค.
Step 1.
expression
๋ฆฌ์คํธ๋ฅผ ์ฒ์๋ถํฐ ํ ๋ฌธ์์ฉ ํ์ํ๋ค.
expression[i]
๊ฐ ์ํ๋ฒณ์ด๋ผ๋ฉด res
๋ผ๋ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ appendํด์ค๋ค.
Step 2.
expression[i]
๊ฐ ์ํ๋ฒณ์ด ์๋๊ณ ์ฐ์ฐ์๋ผ๋ฉด ์ฐ์ ์์์ ๋ง๊ฒ ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค.
expression[i]
๊ฐ (
, ์ฌ๋ ๊ดํธ๋ผ๋ฉด ์ผ๋จ stack
์ push ํด์ค๋ค.
*
๋ /
๋ผ๋ฉด while๋ฌธ์ ๋๋ฉด์ stack
์ด ๋น์ด์์ง ์๋ค๋ฉด stack
์ top์ด ์ฐ์ ์์๊ฐ ๊ฐ์ *
๋ /
๋ ๋จผ์ ๋ค์ด์๊ธฐ ๋๋ฌธ์ stack
์์ pop ํ ํ์ res
์ append ํด์ค๋ค. ์ฐ์ ์์๊ฐ ๋ฎ์ ์ฐ์ฐ์๊ฐ stack
์ top ์ผ ๊ฒฝ์ฐ์๋ expression[i]
๋ฅผ stack
์ push ํด์ค๋ค.
+
๋ -
๋ผ๋ฉด ์ด๋ค๋ณด๋ค ๋ฎ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ์ฐ์ฐ์๊ฐ ์๊ธฐ ๋๋ฌธ์ stack
์ด ๋น์ด์์ง ์์ ๋๊น์ง (
์ด ์๋ ๋๊น์ง ๋ชจ๋ stack
์์ pop ํ ํ์ res
์ append ํด์ค๋ค.
)
๋ผ๋ฉด stack
์ top์ด (
์ผ ๋๊น์ง ๋ชจ๋ ์ฐ์ฐ์๋ค์ res
์ append ํด์ค๋ค.
Step 3.
๋ง์ฝ ์์ ๋ค ํ์ํ๋๋ฐ๋ stack
์ด ๋จ์์๋ค๋ฉด ์ด์งํผ stack
์ ์ฐ์ ์์(์์)๋๋ก ์ ๋ ฌ๋์ด ์๊ธฐ ๋๋ฌธ์ res.append(stack.pop())
ํด์ค๋ค.
๐ ๋์ ์ฝ๋
import sys
input = sys.stdin.readline
def solution(expression):
res = []
stack_operator = []
for e in expression:
if e.isalpha():
res.append(e)
else:
if e == '(':
stack_operator.append(e)
elif e == '*' or e == '/':
while stack_operator and (stack_operator[-1] == '*' or stack_operator[-1] == '/'):
res.append(stack_operator.pop())
stack_operator.append(e)
elif e == '+' or e == '-':
while stack_operator and stack_operator[-1] != '(':
res.append(stack_operator.pop())
stack_operator.append(e)
elif e == ')':
while stack_operator and stack_operator[-1] != '(':
res.append(stack_operator.pop())
stack_operator.pop()
while stack_operator:
res.append(stack_operator.pop())
return res
if __name__ == "__main__":
exp = list(map(str, input().rstrip()))
ans = solution(exp)
for i in ans:
print(i, end='')
'Algorithm > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 1929 ์์ ๊ตฌํ๊ธฐ (Python / ํ์ด์ฌ) (0) | 2021.07.30 |
---|---|
[BOJ] 2609 ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์ (Python / ํ์ด์ฌ) (0) | 2021.07.30 |
[BOJ] 10799 ์ ๋ง๋๊ธฐ (Python / ํ์ด์ฌ) (0) | 2021.07.30 |
[BOJ] 1158 ์์ธํธ์ค ๋ฌธ์ (Pyhton / ํ์ด์ฌ) (0) | 2021.07.30 |
[BOJ] 1874 ์คํ์์ด (Python / ํ์ด์ฌ) (0) | 2021.07.30 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[BOJ] 1929 ์์ ๊ตฌํ๊ธฐ (Python / ํ์ด์ฌ)
[BOJ] 1929 ์์ ๊ตฌํ๊ธฐ (Python / ํ์ด์ฌ)
2021.07.30 -
[BOJ] 2609 ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์ (Python / ํ์ด์ฌ)
[BOJ] 2609 ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์ (Python / ํ์ด์ฌ)
2021.07.30 -
[BOJ] 10799 ์ ๋ง๋๊ธฐ (Python / ํ์ด์ฌ)
[BOJ] 10799 ์ ๋ง๋๊ธฐ (Python / ํ์ด์ฌ)
2021.07.30 -
[BOJ] 1158 ์์ธํธ์ค ๋ฌธ์ (Pyhton / ํ์ด์ฌ)
[BOJ] 1158 ์์ธํธ์ค ๋ฌธ์ (Pyhton / ํ์ด์ฌ)
2021.07.30