Coding Cantabile

[BOJ] #5430_AC(Python3, 파이썬) 본문

Coding Test/BOJ

[BOJ] #5430_AC(Python3, 파이썬)

Gracekim 2023. 3. 4. 16:18

본 게시글은 백준 저지 알고리즘 문제를 '파이썬, Python3' 언어로 풀이한 내용을 주관적으로 정리하였으며, 내용과 관련된 코드리뷰 및 피드백 환영합니다.

티어

Gold V

문제 출처

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


풀이

from collections import deque
import sys
input = sys.stdin.readline

for _ in range(int(input())): # 테스트케이스
    p = input()
    n = int(input())
    arr = input().rstrip()[1:-1].split(',')
    queue = deque(arr)

    rev, front, back = 0, 0, len(queue)-1 # rev가 R의 개수
    flag = 0
    if n == 0:
        queue = []
        front = 0
        back = 0

    for i in p:
        if i == 'R':
            rev += 1
        elif i == 'D':
            if len(queue) < 1:
                flag = 1
                print('error')
                break
            else:
                if rev % 2 == 0:
                    queue.popleft()
                else:
                    queue.pop()

    if flag == 0:
        if rev % 2 == 0:
            print("[" + ",".join(queue) + "]")
        else:
            queue.reverse()
            print("[" + ",".join(queue) + "]")

이 문제에서 입력은 [1:-1] 범위의 부분만 가져와야하기 때문에 rstrip()후 슬라이싱을 해주었다.
처음 list로 풀었다가 시간초과가 발생하여 deque로 바꾸어 문제를 풀었다. deque로 해서 뒤집는 부분을 reverse를 사용하였더니 이번에도 시간초과가 발생하였다. 아마 reverse를 할 때마다 매번 deque를 뒤집어야 했기 때문인 것 같다. 
그래서 뒤집는 휫수를 기억하여 짝수 번 일때는 뒤집지 않고, 홀수 번 일때는 뒤집었다.