DonHurry

[Python] ๋ฐฑ์ค€ 5397๋ฒˆ - ํ‚ค๋กœ๊ฑฐ ๋ณธ๋ฌธ

Problem Solving

[Python] ๋ฐฑ์ค€ 5397๋ฒˆ - ํ‚ค๋กœ๊ฑฐ

_๋„๋… 2022. 11. 5. 17:19

๐Ÿ“– ๋ฌธ์ œ

 

5397๋ฒˆ: ํ‚ค๋กœ๊ฑฐ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๊ฐ•์‚ฐ์ด๊ฐ€ ์ž…๋ ฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ๊ธธ์ด๊ฐ€ L์ธ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ L ≤ 1,000,000) ๊ฐ•์‚ฐ์ด๊ฐ€ ๋ฐฑ์ŠคํŽ˜์ด์Šค๋ฅผ ์ž…

www.acmicpc.net

 

๐Ÿ”Ž ํ’€์ด

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ํ˜น์€ ์Šคํƒ์„ ์ด์šฉํ•˜์—ฌ ํ‘ธ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์Šคํƒ์„ ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

์šฐ์„ , ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ธ€์ž๋ฅผ ๋‹ด์„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค.

์ดํ›„ ์ปค์„œ์˜ ์œ„์น˜๊ฐ€ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐฑ์‹ ํ•ด์ค๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ปค์„œ๊ฐ€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์›€์ง์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๊ธ€์ž๋ฅผ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ๋กœ ์˜ฎ๊ฒจ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋ฝ‘์•„์˜ค๊ฒŒ ๋˜๋Š”๋ฐ, ๋ฆฌ์ŠคํŠธ๋Š” pop(0)๋ฅผ ์‚ฌ์šฉ ์‹œ O(n)์˜ ๋น„์šฉ์ด ํ•„์š”ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋น„์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ O(1)์˜ ๋น„์šฉ์ด ๋“œ๋Š” pop()๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์œผ๋กœ ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ๋Š” ์—ญ์ˆœ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ๋งˆ์ง€๋ง‰์— ๋’ค์ง‘์–ด์„œ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์— ๋”ํ•ด์ค๋‹ˆ๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ

import sys
input = sys.stdin.readline

for _ in range(int(input())):
    secret_order = input().strip()
    pre_stack = []
    post_stack = []
    
    # ํ™”์‚ดํ‘œ๋กœ ํ˜„์žฌ ์œ„์น˜๊ฐ€ ์˜ฎ๊ฒจ์งˆ ๋•Œ๋งˆ๋‹ค ํ˜„์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์•ž์ชฝ์€ pre, ๋’ค์ชฝ์€ post์— ์ €์žฅ
    # ์ด๋•Œ ์‹œ๊ฐ„ ๋น„์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด post๋Š” ๊ฑฐ๊พธ๋กœ ์ €์žฅ
    # ์•ž์˜ ์ธ๋ฑ์Šค ์›์†Œ๋ฅผ ์ œ๊ฑฐ ์‹œ O(n), pop()์„ ์ด์šฉํ•  ์‹œ O(1)
    for order in secret_order:
        if order == '-':
            if pre_stack: pre_stack.pop()

        elif order == '<':
            if pre_stack: post_stack.append(pre_stack.pop())

        elif order == '>':
            if post_stack : pre_stack.append(post_stack.pop())

        else:
            pre_stack.append(order)
    
    # pre_stack์€ ๊ทธ๋Œ€๋กœ, post_stack์€ ๋’ค์ง‘์–ด์„œ ํ•ฉ์น˜๊ธฐ
    answer = ''.join(pre_stack) + ''.join(post_stack)[::-1]
    print(answer)