크게 생각하고, 목표를 높게 잡고, 대담하게 행동하라.

“언젠가는 목표에 이를지도 모르는 단계를 밟는 것으로는 언제나 실패한다. 모든 단계가 그 자체로 목표인 동시에 목표로 이르는 단계여야한다.” - 괴테

알고리즘/자료구조

[Python] 백준 5430 - AC

o_onn5 2023. 1. 24. 16:23
728x90

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

 

5430번: AC

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

www.acmicpc.net

 

deque에 대해서 알아볼 수 있는 문제다.

처음에는 R을 받을 때마다 q.reverse()를 통해 역순정렬을 해서 시간초과가 나왔다.

cnt 변수를 하나 만들어서 R을 받을 때마다 1씩 증가시키며 마지막에 한 번만 reverse를 해주면 되는 문제였다.

이게 핵심이었던 것 같고, 공부하면서 reverse(), rotate(), 리스트와 덱의 차이점 등을 알 수 있어서 좋은 문제라 생각한다.

from collections import deque

def a(command, l, q):

    # cnt가 홀수면 자리바꿈
    cnt = 0
    for i in command:
            if i=='R':
                cnt+=1
            elif i=='D':
                if len(q)==0:
                    return "error"
                elif cnt%2==0:
                    q.popleft()
                elif cnt%2==1:
                    q.pop()
    
    if cnt%2==0:
        return '[' + ','.join(q) + ']'
    else:
        q.reverse()
        return '[' + ','.join(q) + ']'

n=int(input())

for _ in range(n):
    command = input()
    l = int(input())
    q = deque(input().rstrip()[1:-1].split(","))
    if q[0]=='':
        q = deque([])
    print(a(command, l, q))
728x90