백준 5430번 바로가기
첫 번째 풀이#
t = int(input()) # 테스트 케이스의 개수
for _ in range(t):
# 입력
p = input() # 수행할 함수 1~100,000
n = int(input()) # 배열에 들어있는 수의 개수 1~100,000
arr = input()[1:-1].split(',')
if n == 0:
arr = []
# 처리
for f in p:
if f == "R":
arr = arr[::-1]
elif f == "D":
if arr == []:
print('error')
break
else:
arr.pop(0)
print('['+','.join(arr)+']')
두 번째 풀이#
from collections import deque
t = int(input()) # 테스트 케이스의 개수
for _ in range(t):
# 입력
p = input() # 수행할 함수 1~100,000
n = int(input()) # 배열에 들어있는 수의 개수 1~100,000
arr = deque(input()[1:-1].split(','))
if n == 0:
arr = deque()
# 처리
for f in p:
if f == "R":
arr.reverse()
elif f == "D":
if arr:
arr.popleft()
else:
print('error')
break
print('['+','.join(arr)+']')
세 번째 풀이#
from collections import deque
t = int(input()) # 테스트 케이스의 개수
for _ in range(t):
# 입력
p = input() # 수행할 함수 1~100,000
n = int(input()) # 배열에 들어있는 수의 개수 1~100,000
arr = deque(input()[1:-1].split(','))
if n == 0:
arr = deque()
count = 0
# 처리
for f in p:
if f == "R":
count += 1
elif f == "D":
if arr:
if count%2 == 0:
arr.popleft()
else:
arr.pop()
else:
print('error')
break
else:
if count%2 == 1:
arr.reverse()
print('['+','.join(arr)+']')
CODE REVIEW#
- 첫 번째 풀이에서는
시간초과
에러로 걸렸다. list로 구현하다보니 탐색에 시간이 오래 걸린 모양이다.
- 두 번째 풀이에서는
deque
를 활용했는데, 여전히 시간초과
에러가 발생했다. reverse()가 여러번 실행되면서 그런듯…
- 세 번쨰 풀이에서는
reverse()
가 여러 번 호출되는 것을 방지하기 위해 count=0을 도입해서 홀짝성에 따라 pop()
popleft()
을 선택하고, reverse()
는 한 번만 실행해주었다.
- 처음에는 만만하게 봤던 문제였는데, 생각보다 고려할게 많았다. 이런 기법들은 기억해두었다가 시간 단축이 필요할 때 써먹어야겠다.