๋ฌธ์ (์ถ์ฒ: 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 ๋ค์ง๊ธฐ)
์๊ฐ๐ค
์ด ๋ฌธ์ ๋ ๋ช ๋ฌ ์ ์ ํ์ด๋ณด๊ณ ์๊ฐ ์ด๊ณผ๋ฅผ ํด๊ฒฐ ๋ชปํด์ ์ ์ ์ ์ด๋๋ ๋ฌธ์ ์ด๋ค.
์.. ๋ค๋ค ์ ๋ ๊ฒ ํธ๋ ๊ฒ์ ์ ๋ ๋ชป ํธ๋๊ฐ?!
๊ทธ๋๋ ์กฐ๊ธ์ ํํธ๋ฅผ ๋ณด๊ณ ์์ฐจ ํ๊ณ ๋ ๋ฌธ์ ๋ฅผ ํ ์ ์์๋ค.
ํ์ดํ -!
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 2606_๋ฐ์ด๋ฌ์ค (0) | 2022.01.07 |
---|---|
[Baekjoon] 1260_DFS์ BFS (0) | 2022.01.06 |
[Baekjoon] 7795_๋จน์ ๊ฒ์ธ๊ฐ ๋จนํ ๊ฒ์ธ๊ฐ (0) | 2022.01.04 |
[Baekjoon] 14426_์ ๋์ฌ ์ฐพ๊ธฐ (0) | 2021.12.27 |
[Baekjoon] 10211_Maximum Subarray (0) | 2021.11.01 |