본문 바로가기
Problem Solving/BOJ

[Deque] 5430 AC

by Bokoo14 2023. 1. 8.

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

 

5430번: AC

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

www.acmicpc.net

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

t = int(input())
for i in range(t):
    p=list(input().strip())
    n=int(input())
    if n==0:
        number=input()
        number=[]
    else:
        number=deque(input().strip()[1:-1].split(","))
    
    R=0
    answer=1
    for j in p:
        if j=='R': #  R=>뒤집어야 할때
            R+=1
        else: # W=>제일 첫번째 수를 버려야 할때 
            if len(number)==0:
                print("error")
                answer=0
                break
            elif R%2==1:
                number.pop()
            else:
                number.popleft()

    if answer==1 and R%2==0:
        print("["+",".join(number)+"]")
    elif answer==1 and R%2==1:
        number.reverse()
        print("["+",".join(number)+"]")

key point!

"R"가 나올때 마다 뒤집어주면 시간초과 => R이 나오는 횟수를 세어줌

 

1. R이 나오면 횟수를 세어줌

2. D가 나오면 R의 횟수를 확인해봄

2-0) D가 나와서 첫번째 수를 제거해야 하는데, 빈 배열인 경우 "error"출력 & answer=0으로 바꿔줌

2-1) R이 홀수번 나왔으면 뒤집힌 상태이므로 제일 뒤 제거

2-2) R이 짝수번 나왔으면 원래 상태이므로 제일 앞 제거

3. answer=1일때만 배열을 출력해줌

3-1) R이 짝수번이면 배열을 그대로 출력

3-2) R이 홀수번이면 배열을 뒤집어서 출력

 

핵심

배열 뒤집기를 마지막 한번만 해주는게 중요

 

'Problem Solving > BOJ' 카테고리의 다른 글

[Dijkstra] 1916 최소비용 구하기  (0) 2023.01.12
[BFS] 7569 토마토  (0) 2023.01.09
[Brute Force] 1107 리모컨  (0) 2023.01.08
[Brute Force] 18111 마인크래프트  (0) 2023.01.07
[Queue] 1966 프린터 큐  (0) 2023.01.07