문제
요약
- 정수 배열이 주어지고, 그 배열에 행할 함수 목록이 주어진다.
- R 함수는 배열을 뒤집고, D 함수는 배열의 첫 번째 요소를 제거한다.
- D 함수를 실행 시, 제거할 요소가 없으면 error 를 반환한다.
- 함수를 실행한 결과 또는 error 을 반환하자.
분류
- 구현
- 자료구조 (덱)
- 문자열
풀이
1. 덱 사용 X, 그냥 풀이
- 덱을 사용하면 “정석”으로 풀리겠으나, 덱을 사용하지 않고 풀었다.
- R 이 나오면, reverse의 상태를 갱신한다. 만약 뒤집어진 상태라면(reverse == True) end 의 값을 1 줄인다. 뒤집어지지 않은 상태라면(reverse == False) start의 값을 1 늘린다.
- 리스트 슬라이싱을 통해 값을 반환한다.
T = int(input())
inp = [
[input(), int(input()), input()] for _ in range(T)
]
for f, n, arr in inp:
arr = arr[1:-1].split(',')
reverse = False
start = 0
end = n
for func in f:
if func == 'R':
reverse = not reverse
elif func == 'D':
if reverse:
end -= 1
else:
start += 1
if start > end:
print("error")
else:
result = arr[start:end]
if reverse:
result.reverse()
print('[' + ','.join(result) + ']')
2. 덱 사용
from collections import deque
T = int(input())
inp = [
[input(), int(input()), input()] for _ in range(T)
]
for f, n, arr in inp:
arr = deque(arr[1:-1].split(',')) if arr != '[]' else deque()
reverse = False
for func in f:
if func == 'R':
reverse = not reverse
elif func == 'D':
if not arr:
print("error")
break
if reverse:
arr.pop()
else:
arr.popleft()
else:
if reverse:
arr.reverse()
print('[' + ','.join(arr) + ']')