[백준] 5430 AC (Python)

Siri·2022년 5월 17일
0

백준

목록 보기
2/2

[Gold V] AC - 5430


[골드 5] AC - 5430
문제 링크: https://www.acmicpc.net/problem/5430

예제 입력 1)


4
RDD
4
[1,2,3,4]
DD
1
[42]
RRD
6
[1,1,2,3,5,8]
D
0
[]

예제 출력 1)


[2,1]
error
[1,2,3,5,8]
error

전체 코드


1) 가장 짧은 코드


from collections import deque
for _ in range(int(input())):
    c=input()
    n=int(input())
    q=deque(eval(input()))
    try:
        step=1
        for p in c:
            if p=="R":
                step*=-1
            else:
                q.popleft() if step==1 else q.pop()
        print(str(list(q)[::step]).replace(" ",""))
    except:
    	print('error')

이 코드는 빈 배열을 입력 받을 때에 대한 예외가 없어도 돼서 편하다.

  • eval() 함수를 활용해서 빈 배열([])에 대한 예외처리를 하지 않아도 된다.

  • deque에서 pop을 하려고 하면 어차피 오류가 나기 때문에 try-except 문을 사용했다.

  • 슬라이싱 ([start : end : step]) 을 활용해서
    li[::-1]이런 식으로 리스트를 거꾸로 출력할 수 있다.
    li[::1]은 그냥 li와 같다.
    따라서 R이 나올 때 마다 1, -1, 1, -1, 1, -1... 이런 식으로 값을 바꿔주면 된다.
    step을 처음에는 1로 설정하고, R이 나올 때 마다 step-1을 곱해준다.
    이렇게 하면 마지막 출력 시에 list(q)[::step] 형태로 활용할 수 있다.

2) 가장 빠른 코드 (204 ms)


from collections import deque
for _ in range(int(input())):
    commands=input()
    n=int(input())
    arr=input()
    if n<commands.count('D'):
        print('error')
    elif n==0:
        print('[]')
    else:
        queue=deque(arr[1:-1].split(','))
        isReversed=False
        for cmd in commands:
            if cmd=="R":
                isReversed^=True
            else:
                queue.pop() if isReversed else queue.popleft()
        print('[' + ','.join(reversed(queue)if isReversed else queue) +']')
  • eval()을 쓰지 않고 split()을 활용했다.
    따라서 n0일때 예외처리를 해줬다.

  • nD의 개수보다 작으면 'error'를 출력한다.

  • step 대신 isReversed라는 bool타입 변수를 사용했다.

0개의 댓글