본문 바로가기
알고리즘/자료구조

[백준][Python] 5430번 AC

by 임짠짠 2022. 2. 16.
반응형
 

5430번: AC

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

www.acmicpc.net

 

코드

import sys
from collections import deque
T = int(input())

for i in range(T):
    err = 0
    rev = 0
    p = list(sys.stdin.readline().strip())
    n = int(sys.stdin.readline())
    arr = deque(sys.stdin.readline().strip()[1:-1].split(','))
    
   
    for j in p:
        if j == 'R':
            if rev == 0:
                rev = 1
            elif rev == 1:
                rev = 0
        elif j == 'D':
            if len(arr) == 0 or n ==0:
                err = 1
                print("error")
                break
            else:
                if rev == 0:
                    arr.popleft()
                elif rev == 1:
                    arr.pop()
    
    if err == 0:
        if rev == 1:
            arr.reverse()
        print('['+','.join(arr)+']')

 

설명

[]를 입력받아도 deque의 길이는 1이기 때문에 n이 0일 때 error를 출력하는 조건문을 따로 만들어줘야 한다. deque에 아무것도 들어있지 않을 때 R이 들어오면 에러가 발생하지 않지만 D가 들어오면 에러가 발생한다.

처음에는 시간초과 오류가 떴다. R을 입력받을 때마다 reverse를 해줬는데,  arr.reverse()는 배열의 크기만큼 시간이 들기 때문에 R이 많은 케이스가 나올 경우 시간초과가 뜨게 된다.  따라서 rev 변수를 만들어서 처음 나왔을 때는 1로 바꿔주고 만약 이미 1이었으면 0으로 바꿔준다. rev가 1이면 reverse를 해줘야 하는데 아직 해주지 않은 것이므로 pop을 할 때는 deque의 가장 마지막에 있는 값을 빼줘야 된다. 마지막에 rev 값이 1이면 reverse를 해주었고 0이면 그냥 유지시켜줬다.

반응형

댓글