๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 5397_ํ‚ค๋กœ๊ฑฐ

๋ฟŒ์•ผ._. 2022. 1. 5. 21:57

Silver III

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/5397)

<ํ‚ค๋กœ๊ฑฐ>

๋ฌธ์ œ 

 

์ฐฝ์˜์ด๋Š” ๊ฐ•์‚ฐ์ด์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ›”์น˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ•์‚ฐ์ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ์— ํ‚ค๋กœ๊ฑฐ๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค. ๋ฉฐ์น ์„ ๊ธฐ๋‹ค๋ฆฐ ๋์— ์ฐฝ์˜์ด๋Š” ๊ฐ•์‚ฐ์ด๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐฝ์— ์ž…๋ ฅํ•˜๋Š” ๊ธ€์ž๋ฅผ ์–ป์–ด๋ƒˆ๋‹ค.
ํ‚ค๋กœ๊ฑฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ณด๋“œ๋ฅผ ๋ˆ„๋ฅธ ๋ช…๋ น์„ ๋ชจ๋‘ ๊ธฐ๋กํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ•์‚ฐ์ด๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•  ๋•Œ, ํ™”์‚ดํ‘œ๋‚˜ ๋ฐฑ์ŠคํŽ˜์ด์Šค๋ฅผ ์ž…๋ ฅํ•ด๋„ ์ •ํ™•ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. 
๊ฐ•์‚ฐ์ด๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐฝ์—์„œ ์ž…๋ ฅํ•œ ํ‚ค๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ•์‚ฐ์ด์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๊ฐ•์‚ฐ์ด๋Š” ํ‚ค๋ณด๋“œ๋กœ ์ž…๋ ฅํ•œ ํ‚ค๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž, ์†Œ๋ฌธ์ž, ์ˆซ์ž, ๋ฐฑ์ŠคํŽ˜์ด์Šค, ํ™”์‚ดํ‘œ์ด๋‹ค.

 

 

์ž…๋ ฅ

 

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๊ฐ•์‚ฐ์ด๊ฐ€ ์ž…๋ ฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ๊ธธ์ด๊ฐ€ L์ธ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ L ≤ 1,000,000) ๊ฐ•์‚ฐ์ด๊ฐ€ ๋ฐฑ์ŠคํŽ˜์ด์Šค๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด, '-'๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ ์ปค์„œ์˜ ๋ฐ”๋กœ ์•ž์— ๊ธ€์ž๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ทธ ๊ธ€์ž๋ฅผ ์ง€์šด๋‹ค. ํ™”์‚ดํ‘œ์˜ ์ž…๋ ฅ์€ '<'์™€ '>'๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ๋Š” ์ปค์„œ์˜ ์œ„์น˜๋ฅผ ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋งŒํผ ์›€์ง์ธ๋‹ค. ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์ผ๋ถ€์ด๋‹ค. ๋ฌผ๋ก , ๋‚˜์ค‘์— ๋ฐฑ์ŠคํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ ์ง€์šธ ์ˆ˜๋Š” ์žˆ๋‹ค. ๋งŒ์•ฝ ์ปค์„œ์˜ ์œ„์น˜๊ฐ€ ์ค„์˜ ๋งˆ์ง€๋ง‰์ด ์•„๋‹ˆ๋ผ๋ฉด, ์ปค์„œ ๋ฐ ์ปค์„œ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์ž๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•œ๋‹ค.

 

์ถœ๋ ฅ 

 

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ๊ฐ•์‚ฐ์ด์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ๊ธธ์ด๋Š” ํ•ญ์ƒ 0๋ณด๋‹ค ํฌ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

   - ์‹œ๊ฐ„ ์ดˆ๊ณผ ์ฝ”๋“œ

import sys

if __name__=='__main__':
    t=int(sys.stdin.readline().strip())

    for i in range(t):
        x=sys.stdin.readline().strip()

        arr=[]
        idx=0
        for j in x:
            if j=='<':
                if idx!=0:
                    idx-=1
            elif j=='>':
                if idx<len(arr):
                    idx+=1
            elif j=='-':
                if idx>0:
                    idx-=1
                    arr.pop(idx)
                    if idx>0:
                        idx-=1
            else:
                left=arr[:idx]
                right=arr[idx:]
                left.append(j)
                arr=left+right
                idx+=1
                
        print(''.join(arr))

 

  • >์™€ <์ผ ๋•Œ index ์ด๋™
  • - ์ผ ๋•Œ pop
  • ๋ฌธ์ž ์ž…๋ ฅ์ผ ๋•Œ list slice๋ฅผ ํ™œ์šฉํ•˜์—ฌ append ํ›„ ๋ถ™์ด๊ธฐ

๋‚˜๋ฆ„ index๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ํ•ด์„œ ์‚ฌ์šฉํ•œ ๊ฑด๋ฐ ์•„๋‹ˆ์—ˆ๋‚˜ ๋ณด๋‹ค ใ…Žใ…Ž ๋ฌธ์ž ์ž…๋ ฅํ•  ๋•Œ list๋ฅผ ๊ณ„์†ํ•ด์„œ slice ํ•˜๊ณ  ๋ถ™์ด๋Š” ๊ฒƒ์ด ์‹œ๊ฐ„์„ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๊ฒฐ๋ก ์ด ๋‚ฌ๋‹ค. (ํ˜ผ์ž๋งŒ์˜ ์ƒ๊ฐ)

 

๊ณ„์†ํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ๊ฒฐ๊ตญ ๊ฒ€์ƒ‰์˜ ํž˜์„ ๋นŒ๋ ธ๋‹ค. index๊ฐ€ ์•„๋‹Œ ์ปค์„œ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋‚˜๋ˆ„์–ด list๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํžŒํŠธ๋กœ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

 

- ํ†ต๊ณผํ•œ ์ฝ”๋“œ

import sys

if __name__=='__main__':
    t=int(sys.stdin.readline().strip())

    for i in range(t):
        x=sys.stdin.readline().strip()

        left=[]
        right=[]
        for j in x:
            if j=='<': # ์ปค์„œ ์™ผ์ชฝ์œผ๋กœ ์ด๋™
                if len(left)!=0:
                    right.append(left.pop())
            elif j=='>': # ์ปค์„œ ์˜ค๋ฅด์ชฝ์œผ๋กœ ์ด๋™
                if len(right)>0:
                    left.append(right.pop())
            elif j=='-': # ๋ฐฑ์ŠคํŽ˜์ด์Šค
                if len(left)!=0:
                    left.pop()
            else: # ๊ธ€์ž ์ž…๋ ฅ
                left.append(j)

        arr=left+list(reversed(right)) # right๋ฅผ ๋’ค์ง‘์–ด์„œ left์™€ ๋ถ™์ด๊ธฐ

        print(''.join(arr))

 

์ปค์„œ๋ฅผ > ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์›€์ง์ด๋ฉด ์™ผ์ชฝ์˜ list ๊ฐ’์„ ํ•˜๋‚˜ pop ํ•˜์—ฌ ์˜ค๋ฅธ์ชฝ list์— ๋„ฃ๋Š”๋‹ค.

< ์™ผ์ชฝ์œผ๋กœ ์›€์ง์ด๋ฉด ์˜ค๋ฅธ์ชฝ์˜ list ๊ฐ’ ํ•˜๋‚˜๋ฅผ pop ํ•˜์—ฌ ์™ผ์ชฝ list์— ๋„ฃ๋Š”๋‹ค. 

- ์ด๋ฉด ์ปค์„œ ์™ผ์ชฝ์— ์žˆ๋Š” ๊ฐ’ ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ•˜๋ฏ€๋กœ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ ๊ฐ’์„ ํ•˜๋‚˜ pop ํ•œ๋‹ค. 

๋ฌธ์ž์ธ ๊ฒฝ์šฐ ์ปค์„œ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

๋งˆ์ง€๋ง‰ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ฉ์น  ๋•Œ์—๋„ ์‹ค์ˆ˜ํ•˜์—ฌ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๊ฐ€ ํ•œ๋ฒˆ ๋” ๋ฐœ์ƒํ–ˆ์—ˆ๋‹ค.

๋ฆฌ์ŠคํŠธ๋ฅผ ๋ถ™์ผ ๋•Œ ์ฃผ์˜ํ•  ์ ์€ ์˜ค๋ฅธ์ชฝ list๋Š” ๋’ค์ง‘์–ด์„œ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

  • >์™€ <์ผ ๋•Œ list pop ํ•˜์—ฌ ๋ฐ˜๋Œ€์ชฝ list์— append
  • - ์ผ ๋•Œ ์™ผ์ชฝ list pop
  • ๊ธ€์ž ์ž…๋ ฅ์ผ ๋•Œ ์™ผ์ชฝ list append
  • left+(right ๋’ค์ง‘๊ธฐ)

์ƒ๊ฐ๐Ÿค”

 

์ด ๋ฌธ์ œ๋„ ๋ช‡ ๋‹ฌ ์ „์— ํ’€์–ด๋ณด๊ณ  ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ํ•ด๊ฒฐ ๋ชปํ•ด์„œ ์ž ์‹œ ์ ‘์–ด๋’€๋˜ ๋ฌธ์ œ์ด๋‹ค.

์•„.. ๋‹ค๋“ค ์ €๋ ‡๊ฒŒ ํ‘ธ๋Š” ๊ฒƒ์„ ์™œ ๋‚œ ๋ชป ํ‘ธ๋Š”๊ฐ€?!

๊ทธ๋ž˜๋„ ์กฐ๊ธˆ์˜ ํžŒํŠธ๋ฅผ ๋ณด๊ณ  ์•„์ฐจ ํ•˜๊ณ ๋Š” ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํŒŒ์ดํŒ… -!