동바리 2023. 1. 5. 11:25

https://www.acmicpc.net/problem/5430

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

from audioop import reverse
import sys
from collections import deque

t = int(input())

for i in range(t):
    reverse_cnt = 0
    p = sys.stdin.readline().rstrip()
    n = int(input())
    arr = deque(sys.stdin.readline().rstrip()[1:-1].split(","))
    j = True
    for i in range(0, len(p)):
        if p[i] == 'R':
            reverse_cnt += 1

        elif p[i] == 'D':
            if n == 0 or len(arr) == 0:
                print("error")
                j = False
                break

            if reverse_cnt % 2 == 0:
                arr.popleft()
                continue

            arr.pop()

    if (j == False):
        continue

    if reverse_cnt % 2 == 0:
            print("[" + ",".join(arr) + "]")
    else:
        arr.reverse()
        print("[" + ",".join(arr) + "]")
  1. R 함수가 있다해서, 반드시 뒤집을 필요 없습니다. 만날때마다 뒤집기를 실행하면 시간 초과가 발생합니다.
  2. R 함수 카운트가 홀수일 경우만 뒤집어주면 됩니다. 왜냐하면 "RR" 이렇게 두번 나온다면 원래 배열과 동일하기 때문입니다. "R" 또는 "RRR" 이런식의 홀수 카운트라면 뒤집는게 유효합니다.