๋šœ๋ถ€๋‹ˆ์˜ Devlog

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

by ๋šœ๋ถ€๋‹ˆ

 

 

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

์ฒซ์งธ ์ค„์— ์ค‘์œ„ ํ‘œ๊ธฐ์‹์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹จ ์ด ์ˆ˜์‹์˜ ํ”ผ์—ฐ์‚ฐ์ž๋Š” A~Z์˜ ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ ์ˆ˜์‹์—์„œ ํ•œ ๋ฒˆ์”ฉ๋งŒ ๋“ฑ์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  -A+B์™€ ๊ฐ™์ด -๊ฐ€ ๊ฐ€์žฅ ์•ž์— ์˜ค๊ฑฐ๋‚˜ AB์™€ ๊ฐ™์ด *๊ฐ€ ์ƒ๋žต๋˜๋Š” ๋“ฑ์˜ ์ˆ˜์‹

www.acmicpc.net

 

์ด ๋ฌธ์ œ๋Š” ์ค‘์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ์ฃผ์–ด์ง„ ๊ฐ’์„ ํ›„๊ธฐ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ฆ‰, A+B*C-D/E๋ผ๊ณ  ์ฃผ์–ด์ง„ ์ค‘์œ„ ํ‘œ๊ธฐ์‹์„ ABC*+DE/- ์™€ ๊ฐ™์€ ํ›„๊ธฐ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ฐ”๊พธ์–ด ์ถœ๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๊ฒฐ๊ด๊ฐ’์€ ๋ฌธ์ž๋กœ ์ถœ๋ ฅ๋˜๋ฏ€๋กœ ํ›„์œ„ ํ‘œ๊ธฐ์‹์„ ๋ฌธ์ž์—ด๋กœ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”ผ์—ฐ์‚ฐ์ž๋Š” ์•ŒํŒŒ๋ฒณ์œผ๋กœ ์ฃผ์–ด์ง€๋ฏ€๋กœ isalpha()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์—ฐ์‚ฐ์ž์™€ ๊ตฌ๋ถ„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฐฉ์‹์œผ๋กœ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์ฐพ์œผ๋ฉด ๊ฒฐ๊ด๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฌธ์ž์—ด์— ๋”ํ•ด์ค๋‹ˆ๋‹ค.

 

์—ฐ์‚ฐ์ž์˜ ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ stack์— ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ ์กฐ๊ฑด์— ๋”ฐ๋ฅธ pop์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์กฐ๊ฑด์— ๋”ฐ๋ผ pop์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ๊ฒฐ๊ด๊ฐ’์„ ๋งŒ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•˜๋ฉด, 

  1. ( ๋Š” ๋ฌด์กฐ๊ฑด stack์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  2. *์ด๋‚˜ / ์€ stack์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— stack์— ์กด์žฌํ•˜๋Š” *์ด๋‚˜ /์„ pop ํ•˜์—ฌ ๊ฒฐ๊ด๊ฐ’์— ์ €์žฅํ•œ๋‹ค.
  3. +๋‚˜ -๋Š” stack์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— stack์— ์กด์žฌํ•˜๋Š” ( ์ง์ „๊นŒ์ง€์˜ ๊ฐ’๋“ค์„ ๋ชจ๋‘ pop ํ•˜์—ฌ ๊ฒฐ๊ด๊ฐ’์— ์ €์žฅํ•œ๋‹ค.
  4. )๋Š” 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

๋šœ๋ถ€๋‹ˆ

ํ™œ๋™ํ•˜๊ธฐ