[BOJ] 1918.ํ์ํ๊ธฐ์ (Python)
by ๋๋ถ๋
1918๋ฒ: ํ์ ํ๊ธฐ์
์ฒซ์งธ ์ค์ ์ค์ ํ๊ธฐ์์ด ์ฃผ์ด์ง๋ค. ๋จ ์ด ์์์ ํผ์ฐ์ฐ์๋ A~Z์ ๋ฌธ์๋ก ์ด๋ฃจ์ด์ง๋ฉฐ ์์์์ ํ ๋ฒ์ฉ๋ง ๋ฑ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ -A+B์ ๊ฐ์ด -๊ฐ ๊ฐ์ฅ ์์ ์ค๊ฑฐ๋ AB์ ๊ฐ์ด *๊ฐ ์๋ต๋๋ ๋ฑ์ ์์
www.acmicpc.net
์ด ๋ฌธ์ ๋ ์ค์ ํ๊ธฐ์์ผ๋ก ์ฃผ์ด์ง ๊ฐ์ ํ๊ธฐ ํ๊ธฐ์์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ ๋๋ค.
์ฆ, A+B*C-D/E๋ผ๊ณ ์ฃผ์ด์ง ์ค์ ํ๊ธฐ์์ ABC*+DE/- ์ ๊ฐ์ ํ๊ธฐ ํ๊ธฐ์์ผ๋ก ๋ฐ๊พธ์ด ์ถ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
๊ฒฐ๊ด๊ฐ์ ๋ฌธ์๋ก ์ถ๋ ฅ๋๋ฏ๋ก ํ์ ํ๊ธฐ์์ ๋ฌธ์์ด๋ก ๊ด๋ฆฌํ์ต๋๋ค.
ํผ์ฐ์ฐ์๋ ์ํ๋ฒณ์ผ๋ก ์ฃผ์ด์ง๋ฏ๋ก isalpha()๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ์ฐ์ฐ์์ ๊ตฌ๋ถ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ฐฉ์์ผ๋ก ํผ์ฐ์ฐ์๋ฅผ ์ฐพ์ผ๋ฉด ๊ฒฐ๊ด๊ฐ์ ์ ์ฅํ๋ ๋ฌธ์์ด์ ๋ํด์ค๋๋ค.
์ฐ์ฐ์์ ๊ฒฝ์ฐ ์ฐ์ ์์๋ฅผ ์ ํ๊ณ ๊ทธ์ ๋ฐ๋ผ stack์ ์ถ๊ฐํ๋๋ฐ, ์ด ๊ณผ์ ์์ ์กฐ๊ฑด์ ๋ฐ๋ฅธ pop์ด ํ์ํฉ๋๋ค.
์กฐ๊ฑด์ ๋ฐ๋ผ pop์ ์ฒ๋ฆฌํ๋ฉด์ ๊ฒฐ๊ด๊ฐ์ ๋ง๋ค์ด ๊ฐ ์ ์์ต๋๋ค.
์ฐ์ ์์์ ๋ฐ๋ผ ์ฒ๋ฆฌํ๋ฉด,
- ( ๋ ๋ฌด์กฐ๊ฑด stack์ ์ถ๊ฐํ๋ค.
- *์ด๋ / ์ stack์ ์ถ๊ฐํ๊ธฐ ์ ์ stack์ ์กด์ฌํ๋ *์ด๋ /์ pop ํ์ฌ ๊ฒฐ๊ด๊ฐ์ ์ ์ฅํ๋ค.
- +๋ -๋ stack์ ์ถ๊ฐํ๊ธฐ ์ ์ stack์ ์กด์ฌํ๋ ( ์ง์ ๊น์ง์ ๊ฐ๋ค์ ๋ชจ๋ pop ํ์ฌ ๊ฒฐ๊ด๊ฐ์ ์ ์ฅํ๋ค.
- )๋ stack์ ์กด์ฌํ๋ ( ์ง์ ๊น์ง์ ๊ฐ๋ค์ ๋ชจ๋ pop ํ์ฌ ๊ฒฐ๊ด๊ฐ์ ์กด์ฌํ๊ณ , stack์์ ( ์ ๊ฑฐ๋ฅผ ์ํด pop์ ์ถ๊ฐ๋ก ํ ๋ฒ ๋ ์ํํ๋ค.
์ด์ ๊ฐ์ ํํ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
text = input()
answer = ''
stack = [] # ์ฐ์ฐ์ ๊ด๋ฆฌ์ฉ
for t in text :
if t.isalpha() :
answer += t
else :
if t == '(' :
stack.append(t)
elif t == '*' or t == '/' :
while stack and (stack[-1] == '*' or stack[-1] == '/') :
answer += stack.pop()
stack.append(t)
elif t == '+' or t == '-' :
while stack and stack[-1] != '(' :
answer += stack.pop()
stack.append(t)
elif t == ')' :
while stack and stack[-1] != '(' :
answer += stack.pop()
stack.pop() # '('๋ฅผ ๋นผ๋ ์์
while stack :
answer += stack.pop()
print(answer)
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 14890.๊ฒฝ์ฌ๋ก (Python) (0) | 2021.04.20 |
---|---|
[BOJ] 1929.์์๊ตฌํ๊ธฐ (Python) (0) | 2021.04.19 |
[BOJ] 12110.2048(Easy) (0) | 2021.04.19 |
[BOJ] 13549.์จ๋ฐ๊ผญ์ง 3 (Python) (0) | 2021.04.18 |
[BOJ] 1105.ํ (Python) (0) | 2021.04.16 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
๋๋ถ๋์ Devlog
๋๋ถ๋