
https://www.acmicpc.net/problem/5430
๋ฌธ์
์ ์์ด๋ ์ฃผ๋ง์ ํ ์ผ์ด ์์ด์ ์๋ก์ด ์ธ์ด AC๋ฅผ ๋ง๋ค์๋ค. AC๋ ์ ์ ๋ฐฐ์ด์ ์ฐ์ฐ์ ํ๊ธฐ ์ํด ๋ง๋ ์ธ์ด์ด๋ค. ์ด ์ธ์ด์๋ ๋ ๊ฐ์ง ํจ์ R(๋ค์ง๊ธฐ)๊ณผ D(๋ฒ๋ฆฌ๊ธฐ)๊ฐ ์๋ค.
ํจ์ R์ ๋ฐฐ์ด์ ์๋ ์์ ์์๋ฅผ ๋ค์ง๋ ํจ์์ด๊ณ , D๋ ์ฒซ ๋ฒ์งธ ์๋ฅผ ๋ฒ๋ฆฌ๋ ํจ์์ด๋ค. ๋ฐฐ์ด์ด ๋น์ด์๋๋ฐ D๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํจ์๋ ์กฐํฉํด์ ํ ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, "AB"๋ A๋ฅผ ์ํํ ๋ค์์ ๋ฐ๋ก ์ด์ด์ B๋ฅผ ์ํํ๋ ํจ์์ด๋ค. ์๋ฅผ ๋ค์ด, "RDD"๋ ๋ฐฐ์ด์ ๋ค์ง์ ๋ค์ ์ฒ์ ๋ ์๋ฅผ ๋ฒ๋ฆฌ๋ ํจ์์ด๋ค.
๋ฐฐ์ด์ ์ด๊ธฐ๊ฐ๊ณผ ์ํํ ํจ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. T๋ ์ต๋ 100์ด๋ค.
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ ์ํํ ํจ์ p๊ฐ ์ฃผ์ด์ง๋ค. p์ ๊ธธ์ด๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
๋ค์ ์ค์๋ ๋ฐฐ์ด์ ๋ค์ด์๋ ์์ ๊ฐ์ n์ด ์ฃผ์ด์ง๋ค. (0 โค n โค 100,000)
๋ค์ ์ค์๋ [x1,...,xn]๊ณผ ๊ฐ์ ํํ๋ก ๋ฐฐ์ด์ ๋ค์ด์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. (1 โค xi โค 100)
์ ์ฒด ํ ์คํธ ์ผ์ด์ค์ ์ฃผ์ด์ง๋ p์ ๊ธธ์ด์ ํฉ๊ณผ n์ ํฉ์ 70๋ง์ ๋์ง ์๋๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ ์ ๋ฐฐ์ด์ ํจ์๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋ error๋ฅผ ์ถ๋ ฅํ๋ค.
์์

์กฐ๊ฑด
- ์๊ฐ ์ ํ: 1์ด
- ๋ฉ๋ชจ๋ฆฌ ์ ํ: 256MB
์ด๊ธฐ ์ฝ๋
from collections import deque
import sys
input = sys.stdin.readline
for _ in range(int(input())):
command = input().rstrip() # ๋ช
๋ น์ด
n = int(input()) # ์ ์์ ๊ฐ์
if n == 0:
nums = input().rstrip()
print('error')
continue
nums = deque(map(int,input().lstrip('[').rstrip(']\n').split(',')))
temp = True
for c in command:
if c == 'R':
nums.reverse()
elif c == 'D':
if not nums:
temp = False
break
nums.popleft()
if temp:
nums = list(nums)
print('[',end = '')
if nums:
for i in range(len(nums)-1):
print(nums[i],',', sep = '', end = '')
print(nums[-1], end = '')
print(']')
else:
print('error')
๐ค ๋ฌธ์ ๋ฅผ ์ฒ์ ๋ณด์์ ๋๋, ๊ฐ๋จํ๊ฒ deque๋ก reverse์ popleft๋ง ์ฌ์ฉํด ํ ์ ์์ ์ค ์์๋ค. ํ์ง๋ง R์ด ๋์ฌ ๋๋ง๋ค reverse๋ฅผ ํด์ฃผ๋ ๊ฒ์ ๊ต์ฅํ ์๊ฐ์ ๋ง์ด ์ก์๋จน์ด ๊ฒฐ๊ตญ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค...
๐ ์ด ๋ฌธ์ ์ ํต์ฌ์, reverse๋ฅผ ์ง์ ์ฌ์ฉํ์ง ์๊ณ ๋ reverse ์ํค๋ ๊ฒ์ด์๋ค! ์์นญ์ ํตํด ์์๋ณธ ๊ฒฐ๊ณผ ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์๋ค.
์์ ์ฝ๋
from collections import deque
import sys
input = sys.stdin.readline
for _ in range(int(input())):
command = input().rstrip() # ๋ช
๋ น์ด
n = int(input()) # ์ ์์ ๊ฐ์
Q = deque()
nums = input().rstrip()
if n > 0:
for i in nums[1:-1].split(','):
Q.append(i)
error = False
R_cnt = 0
for j in command:
if j == 'R':
R_cnt += 1
elif j == 'D' and len(Q) == 0: # ์๋ฌ๊ฐ ๋์ค๋ ๊ฒฝ์ฐ
error = True
break
else:
if R_cnt % 2 == 0: # ์ ๋ฐฉํฅ์ผ ๊ฒฝ์ฐ
Q.popleft()
else: # ์ญ๋ฐฉํฅ์ผ ๊ฒฝ์ฐ
Q.pop()
if R_cnt % 2 == 1:
Q.reverse()
if error:
print('error')
else:
print('[' + ','.join(list(Q)) + ']')
1. ์ ๋ ฅ
2. ๋ช ๋ น์ด ํด์
'R'์ด ๋์ค๋ฉด, R_cnt๋ฅผ 1 ๋ํด์ค๋ค.
'D'๊ฐ ๋์๋๋ฐ Q๊ฐ ๋น ๊ฒฝ์ฐ, error๋ฅผ ์ถ๋ ฅํด์ค๋ค.
'D'๊ฐ ๋์จ ๊ฒฝ์ฐ, ํ์ฌ R_cnt๊ฐ ํ์๋ผ๋ฉด (= ๋ค์งํ ๊ฒฝ์ฐ) ๋ง์ง๋ง ์์๋ฅผ ์ ๊ฑฐํ๊ณ , ์ง์๋ผ๋ฉด (= ์๋์ ๋ฐฉํฅ) ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ ๊ฑฐํ๋ค.
์ด๋ 'RR'๊ณผ ๊ฐ์ด 'R'์ด ์ง์๋ก ์ฐ์์ผ๋ก ๋์ค๋ ๊ฒฝ์ฐ์๋, ๋ฐฐ์ด์ด ๊ธฐ์กด๊ณผ ๋์ผํจ์ ์ด์ฉํ๋ ๊ฒ์ด๋ค.
์ต์ข ์ ์ธ R_cnt์ ์ํ๊ฐ ํ์๋ผ๋ฉด, ์ค์ ๋ก reverse๋ฅผ ์งํํด์ค๋ค.
3. ์ถ๋ ฅ
๋๋ ์ & ๋ฐฐ์ด ์
์ญ์ ๋ ๋ฒจ์ด ๋์์ง์๋ก ๊ฐ๋จํ ๋ฉ์๋๋ก ํ ์ ์๋ ๋ฌธ์ ๋ ์ค์ด๋๋ ๊ฒ ๊ฐ๋ค. ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ฌ์ฉํ ๊ฒ์ฒ๋ผ ๊ตฌํํ๋ ๋ฅ๋ ฅ์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
reverse๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ์ง ์๊ณ ๋ ํ์ด๋ด๋ ๊ณผ์ ์ด ์ธ์์ ์ด์๋ ๋ฌธ์ ์๋ค!