백준 5430번 - AC

윤여준·2022년 5월 20일
0

백준 풀이

목록 보기
11/35
post-thumbnail

문제

문제 링크 : https://www.acmicpc.net/problem/5430

풀이

입력을 받는 것부터 쉽지 않은 문제이다.

우선 입력을 받은 뒤에 tempList[1:-1]과 같이 슬라이싱을 해주고 이를 ','를 기준으로 쪼개준 것을 deque에 넣었다. 그러나 만약에 n이 0인 경우에는 deque의 길이가 1이 된다. 따라서 n이 0인 경우에는 deque()로 초기화를 시켜주어서 deque의 길이가 0이 되도록 해주었다.

그 다음엔 리스트 p에 담긴 R 또는 D의 작업들을 수행해줬다.
R의 경우는 reverse 변수를 반전시켜줬다. D의 경우는 우선 queue가 비어 있는지 검사를 해줬다. 만약에 queue가 비어 있으면 error = True로 바꿔주고 반복문을 break를 통해 빠져나왔다. 만약에 queue가 비어 있지 않다면 queue에서 값을 빼주었는데, reverse == True인 경우에는 pop을, reverse == False인 경우에는 popleft를 해주었다.

주어진 작업들을 다 수행한 뒤에는 변수 error의 값을 체크해준다. error == True이면 'error'를 출력시켜준다. error == False라면 queue에 남아 있는 수들을 배열 형태로 출력해준다. 만약 reverse == True 라면 역순으로 출력해주고, reverse == False 라면 원래 순서 그대로 출력해준다.

from sys import stdin
from collections import deque

t = int(stdin.readline())

for _ in range(t):
    p = list(stdin.readline().rstrip())
    n = int(stdin.readline())
    tempList = stdin.readline().rstrip()
    queue = deque(tempList[1:-1].split(','))

    if n == 0:
        queue = deque()
    error = False
    reverse = False
    for cmd in p:
        if cmd == 'R':
            reverse = not reverse
        elif cmd == 'D':
            if not queue:
                error = True
                break
            if reverse:
                queue.pop()
            else:
                queue.popleft()

    if error:
        print('error')
    else:            
        if reverse:
            l = list(reversed(queue))
        else:
            l = list(queue)
        print('[',end='')
        cnt = 0
        for i in l:
            print(i,end='')
            cnt += 1
            if cnt != len(l):
                print(',',end='')
        print(']')
profile
Junior Backend Engineer

0개의 댓글