https://www.acmicpc.net/problem/1406
๊ฐ์ฅ ์ ์๋ ค์ง ํ์ด๋ ์คํ์ ๋ ๊ฐ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ปค์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ์์นํ ์คํ๊ณผ ์ค๋ฅธ์ชฝ์ ์์นํ ์คํ ๋ ๊ฐ๋ฅผ ๋ง๋ ๋ค.
์ค๋ฅธ์ชฝ ์คํ์ ๋ฐฉํฅ์ ๋ค์ง์ด๋์๋ค. pop ํ๋ฉด ์ผ์ชฝ์ ์๋ ์์๊ฐ ๋์ค๊ณ , append๋ ์ผ์ชฝ์ ๋๋ค.
์ฒ์์๋ ๋ฌธ์ฅ์ ๋งจ ๋ค์ ์ปค์๊ฐ ์์นํ๋ฏ๋ก ์ผ์ชฝ ์คํ์ ๋ฌธ์๋ฅผ ์์๋๋ก ๋ฃ์ด๋๋ฉด ๋๋ค. ์ปค์๋ ํญ์ left ๋ฆฌ์คํธ ์ค๋ฅธ์ชฝ์ ์๋ค.
๋ง์ฝ "P"๋ผ๋ ๋ช ๋ น์ด๊ฐ ๋ค์ด์ค๋ฉด "$" ์์๋ฅผ ์ปค์ ์ผ์ชฝ์ ์ถ๊ฐํด์ผ ํ๋ค.
๊ทธ๋ฅ ์ปค์ ์ผ์ชฝ์ธ left ๋ฆฌ์คํธ์ append ํด์ฃผ๋ฉด ๋๋ค.
"L"์ด๋ผ๋ ๋ช ๋ น์ด๊ฐ ๋ค์ด์ค๋ฉด ์ปค์๋ฅผ ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ฎ๊ฒจ์ผ ํ๋ค.
ํ์ง๋ง ์ปค์๋ฅผ ์ง์ ์ฎ๊ธธ ํ์๋ ์๋ค.
๊ทธ๋ฅ left ๋ฆฌ์คํธ์์ ๋ง์ง๋ง ์์๋ฅผ pop ํด์ right ๋ฆฌ์คํธ์ append ํด์ฃผ๋ฉด ์ปค์๋ฅผ ์ฎ๊ธด ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๊ฐ ๋ํ๋๋ค.
"L" ๋ช ๋ น์ด๋ฅผ ๋ ๋ฒ ์ฐ์ ์ํํ๋ฉด ์๋์ ๊ฐ๋ค. right ๋ฆฌ์คํธ๊ฐ ๋ค์งํ ์๋ค๋ ๊ฑธ ์์ง ๋ง์.
๋ฐ๋๋ก "D" ๋ช ๋ น์ด๊ฐ ๋ค์ด์ค๋ฉด right ๋ฆฌ์คํธ์ ๋ง์ง๋ง ์์๋ฅผ pop ํด์ left ๋ฆฌ์คํธ์ append ํด์ฃผ๋ฉด ๋๋ค.
"B" ๋ช ๋ น์ด๊ฐ ๋ค์ด์ค๋ฉด ์ปค์ ์ผ์ชฝ์ ๋ฌธ์๋ฅผ ์ญ์ ํด์ผ ํ๋ค.
๊ทธ๋ฅ left ๋ฆฌ์คํธ์ ์์๋ฅผ ํ๋ pop ํ๋ฉด ๋๋ค.
๋ชจ๋ ์กฐ์์ด ๋๋๋ฉด ๋ฌธ์์ด์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ต์ข ๊ฒฐ๊ณผ๊ฐ "ABDX"๊ฐ ๋๋ค.
right ๋ฆฌ์คํธ๋ ๋ค์งํ์๋ ๊ฑธ ๊ณ ๋ คํด์ ์ถ๋ ฅํ๋ฉด ๋ต์ ๊ตฌํ ์ ์๋ค.
์ฝ๋๋ก ์์ฑํ ๋๋ ๋น ๋ฆฌ์คํธ๋ฅผ pop ํ๋ฉด ์ค๋ฅ๊ฐ ๋๋๊น left๋ right์ ์์๊ฐ ์๋์ง๋ฅผ ๊ผญ ํ์ธํด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋น ๋ฅธ ์ ์ถ๋ ฅ์ ์ํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ ์๋ ์์ ๊ฒ ๊ฐ๋ค.
from sys import stdin
left = list(input())
right = []
for _ in range(int(input())):
command = list(stdin.readline().split())
if command[0] == 'L' and left:
right.append(left.pop())
elif command[0] == 'D' and right:
left.append(right.pop())
elif command[0] == 'B' and left:
left.pop()
elif command[0] == 'P':
left.append(command[1])
answer = left + right[::-1]
print(''.join(answer))
์ฌ์ค ์ด ๋ฌธ์ ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก๋ ํ ์ ์๋ค.
๊ณต๋ถ๋ฅผ ํด๋ณด๊ณ ์ถ๋ค๋ฉด ์ง์ ๊ตฌํํด๋ณผ ์๋ ์๋ค.
์ฐธ๊ณ ๋ก ๋ด๊ฐ ์ง ๋๋ฌ์ด ์ฝ๋๋ ์คํ ํ์ด๋ณด๋ค ์ฑ๋ฅ ๋ฉด์์ 4๋ฐฐ ์ ๋ ๋๋ ธ๋ค.
from sys import stdin
# ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋
ธ๋ ํด๋์ค
class ListNode:
def __init__(self, val, prev, next):
self.val = val
self.prev = prev
self.next = next
# ์ฐ๊ฒฐ๋ฆฌ์คํธ์ head
head = ListNode('dummy', None, None)
curr = head
init = input() # ์ด๊ธฐ ๋ฌธ์์ด
for i in range(len(init)): # ์ด๊ธฐ ๋ฌธ์์ด์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด ๋
new_node = ListNode(init[i], None, None)
curr.next = new_node
new_node.prev = curr
curr = new_node
# ๋ช
๋ น์ด๋ค ์ฒ๋ฆฌ
for _ in range(int(input())):
command = stdin.readline().rstrip()
if command == 'L':
if curr.val != 'dummy':
curr = curr.prev
elif command == 'D':
if curr.next:
curr = curr.next
elif command == 'B':
if curr.val != 'dummy':
curr = curr.prev
if curr.next.next:
curr.next = curr.next.next
curr.next.prev = curr
else:
curr.next = None
else:
new_node = ListNode(command[-1], None, None)
if curr.next:
new_node.next = curr.next
curr.next.prev = new_node
curr.next = new_node
new_node.prev = curr
curr = new_node
# head ๋ค์ ๋
ธ๋๋ถํฐ ์ถ๋ ฅ
print_node = head.next
while print_node:
print(print_node.val, end='')
print_node = print_node.next
'๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2839 ์คํ ๋ฐฐ๋ฌ - ํ์ด์ฌ (0) | 2022.12.29 |
---|---|
๋ฐฑ์ค ์ ์ถ๋ ฅ - ํ์ด์ฌ (0) | 2022.11.29 |
๋ฐฑ์ค 2941 ํฌ๋ก์ํฐ์ ์ํ๋ฒณ - ํ์ด์ฌ, ์๋ฐ (0) | 2022.11.26 |
๋ฐฑ์ค 1943 ๋์ ๋ถ๋ฐฐ - ํ์ด์ฌ (0) | 2022.11.23 |
๋ฐฑ์ค 1107 ๋ฆฌ๋ชจ์ปจ - ํ์ด์ฌ (0) | 2022.11.20 |