[골드 5] AC - 5430
문제 링크: https://www.acmicpc.net/problem/5430
4
RDD
4
[1,2,3,4]
DD
1
[42]
RRD
6
[1,1,2,3,5,8]
D
0
[]
[2,1]
error
[1,2,3,5,8]
error
1) 가장 짧은 코드
from collections import deque for _ in range(int(input())): c=input() n=int(input()) q=deque(eval(input())) try: step=1 for p in c: if p=="R": step*=-1 else: q.popleft() if step==1 else q.pop() print(str(list(q)[::step]).replace(" ","")) except: print('error')
이 코드는 빈 배열을 입력 받을 때에 대한 예외가 없어도 돼서 편하다.
eval()
함수를 활용해서 빈 배열([]
)에 대한 예외처리를 하지 않아도 된다.
빈 deque
에서 pop
을 하려고 하면 어차피 오류가 나기 때문에 try-except
문을 사용했다.
슬라이싱 ([start : end : step]
) 을 활용해서
li[::-1]
이런 식으로 리스트를 거꾸로 출력할 수 있다.
li[::1]
은 그냥 li
와 같다.
따라서 R
이 나올 때 마다 1, -1, 1, -1, 1, -1... 이런 식으로 값을 바꿔주면 된다.
step
을 처음에는 1
로 설정하고, R
이 나올 때 마다 step
에 -1
을 곱해준다.
이렇게 하면 마지막 출력 시에 list(q)[::step]
형태로 활용할 수 있다.
2) 가장 빠른 코드 (204 ms)
from collections import deque for _ in range(int(input())): commands=input() n=int(input()) arr=input() if n<commands.count('D'): print('error') elif n==0: print('[]') else: queue=deque(arr[1:-1].split(',')) isReversed=False for cmd in commands: if cmd=="R": isReversed^=True else: queue.pop() if isReversed else queue.popleft() print('[' + ','.join(reversed(queue)if isReversed else queue) +']')
eval()
을 쓰지 않고 split()
을 활용했다.
따라서 n
이 0
일때 예외처리를 해줬다.
n
이 D
의 개수보다 작으면 'error'를 출력한다.
step
대신 isReversed
라는 bool
타입 변수를 사용했다.