문제풀이/백준(Boj) 문제풀이

[백준][큐 & 덱] 5430. AC (파이썬/Python)

얄루몬 2021. 12. 7. 16:48

<오답>

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

t = int(input())

for _ in range(t):
    p =list(input().rstrip())
    n = int(input())
    x = deque(input().rstrip()[1:-1].split(","))

    flag = 0
    
    #입력받을 수가 0인 경우 빈 리스트를 반환
    if n == 0:
        x = deque()
    
    for i in p:
        if i =="R":
            x.reverse()
        elif i == "D":
            if x:
                x.popleft()
            else:
                print("error")
                flag = 1
                break
    if flag == 0:
        print("["+",".join(x)+"]")

# 뒤집는 함수를 R이 나올때마다 뒤집어야 해서 이게 시간초과의 문제가 됐다. 이를 해결하기 위해서는 R의 개수가 홀수일 때만 뒤집는 것으로 수정하여 진행해야 했다.

 

 

<정답>

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

t = int(input())

for i in range(t):
	#오른쪽 \n 제거를 위함 rstrip()함수 사용
    p = input().rstrip()
    n = int(input())
    x = input().rstrip()[1:-1].split(",")
    
    queue = deque(x)

    rev, front, back = 0, 0, len(queue)-1
    flag = 0

    # 넣은 원소가 없을 때 빈 리스트를 돌려 준다. 
    if n == 0:
        queue = []
        front = 0
        back = 0

    for j in p:
        if j == 'R':
            rev += 1
        elif j == '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) + "]")

# R이 짝수일 땐 -> 뒤집기 x (짝수번 뒤집어봐야 똑같으니 popleft() 진행)

 

# R이 홀수일 땐 -> 뒤집기 O(그러나 계속 뒤집기 불가니 뒤에껄 빼준다. pop() 진행) 

 

# 마지막 결과도 R이 짝수개 있을 땐 그냥 출력 R이 홀수개 있을 땐 뒤집어 출력 해주며 결과적으로 resever 함수는 한 번만 사용하거나 사용하지 않게 함.