https://www.acmicpc.net/problem/5430
해당 문제는 문제에서 요구하는 연산을 그대로 구현하면 해결할 수 있다. 다만, "뒤집기" 연산을 매번 수행하면 시간 초과가 발생하기 때문에 입력받은 "뒤집기" 연산의 개수를 집계하였고, 최종 반환값에 이를 반영하였다. 집계된 횟수가 홀수라면 "뒤집기" 연산을 적용하여 처리하였고, 반대로 짝수라면 기존 리스트를 그대로 사용하였다.
문제에서 제시한 "버리기" 연산은 맨 앞의 원소를 버리는 작업이다. 만약 "뒤집기" 연산을 매번 수행한다면 맨 앞의 원소를 제거하는 것만 신경 쓰면 된다. 하지만, 앞서 말했듯이 "뒤집기" 연산은 최종 반환값을 조정할 때만 적용했기에 집계된 "뒤집기" 연산 개수의 홀짝을 바탕으로 맨 앞 혹은 맨 뒤의 원소를 제거하였다. 이를 편하게 수행하기 위해 deque
를 사용하였다.
부끄럽지만 출력 형식을 제대로 확인하지 않아 통과하는 데 오랜 시간이 걸렸다. 문제에서 요구하는 출력 형식을 살펴보면, 모든 문자가 공백 없이 붙어있다...😅 단순히 결과 리스트를 출력하면 안 되고, 문자열 메서드인 join
을 사용해서 출력 형식을 정확하게 맞춰줘야 했다.
import sys
from collections import deque
def perform(orders, target):
r_cnt = 0
for order in orders:
# "뒤집기" 연산 횟수 집계
if order == 'R':
r_cnt += 1
elif order == 'D':
if len(target) == 0:
return 'error'
# 뒤집어져 있다면 맨 뒤의 원소 제거, 그렇지 않다면 맨 앞의 원소 제거
if r_cnt % 2:
target.pop()
else:
target.popleft()
# 출력 형식 정확하게 맞추기
return "[" + ",".join(reversed(target)) + "]" if r_cnt % 2 else "[" + ",".join(target) + "]"
T = int(sys.stdin.readline().rstrip())
for _ in range(T):
P = list(sys.stdin.readline().rstrip())
N = int(sys.stdin.readline().rstrip())
ARR = sys.stdin.readline().rstrip()[1:-1].split(',')
if N == 0:
ARR = []
print(perform(P, deque(ARR)))
End