백준 5430번 AC(Python3)

김성준·2021년 4월 29일
0

알고리즘

목록 보기
2/6
from collections import deque


def ac(orders, arr):
    origin = arr
    deq = deque(origin)
    is_reversed = False
    for order in orders:
        if order == 'R':
            is_reversed = not is_reversed
        else:
            if len(deq) < 1:
                return 'error'
            if is_reversed:
                deq.pop()
            else:
                deq.popleft()
    if is_reversed:
        deq = deque(list(deq)[::-1])
    return str(list(deq)).replace(' ', '')


t = int(input())
for _ in range(t):
    p = list(input())
    n = int(input())
    if n == 0:
        x = list(map(int, input().strip('[]')))
    else:
        x = list(map(int, input().strip('[]').split(',')))
    print(ac(p, x))

문제 :

해결과정 :
처음엔 단순히 'R' 명령에서 배열 전체를 뒤집고 'D'명령에서 deque를 이용해 popleft를 해서 해결하려고 했다. (배열 전체를 뒤집으면 timeout이 뜬다)
예제는 모두 해결되게 만들었는데 채점을 해보니 value error가 떴다!
그 이유는 n = 0이 들어왔을때 그 다음 x를 입력 받지 않고 바로 x = [] 이렇게 빈 리스트로 초기화 해줬기 때문이었다...
그래도 틀린 이유를 찾아 질문 게시판을 둘러보다가 코드를 최적화 하는 방법을 많이 찾아 적용할 수 있었다.
'R' 명령이 들어올때마다 is_reversed변수를 바꿔주면서 pop을 할지 popleft를 할지 결정하면 배열을 통째로 뒤집는 연산을 하지 않아도 'R'명령을 수행할 수 있다!
이런 방식으로 접근하면 마지막에 'R'이 True일때 한번 뒤집어서 출력해줘야한다!
또한 이 문제에서 배열을 그대로 출력하면 틀렸다고 나온다.
출력형식을 잘 확인해서 문제를 풀도록 하자!

profile
수신제가치국평천하

0개의 댓글