Computer Science/백준

백준 5430번 AC

Dior2ky 2021. 8. 18. 15:05
반응형

백준 5430번 AC 문제이다. 

 

문제를 살펴보면 

문제만 봤을때는 R 과 D에 따라서 처리해주면 쉽게 되지 않을까 생각했다.

실제 코딩을 해보니 생각해줄 것들이 꽤나 있었다. 

 

먼저 D를 통해 pop이 되기 때문에 최종 결과가 요소가 없는 []인 상태가 될 수 있다. 이떼는 error가 아닌 []가 출력되도록 해야 한다.

출력은 [x,y,z,...]의 형태를 만족시켜야 했다. 중간에 띄어쓰기가 있으면 안된다. 

로직은 맞지만 돌려보니 시간초과가 나오는 경우가 발생했다. R은 연속으로 나오면 뒤집은걸 다시 뒤집기 때문에 원래의 상태가 된다.

따라서 RR인 경우 없애버리는 로직을 만들었지만 이 또한 시간초과가 발생했다. 

 

뒤늦게 생각해보니 뒤집을 필요가 없었다... 

Deque이기 때문에 앞뒤로 빼내는 것이 가능하고 R이 나오고 D가 나온경우 맨 뒤의 요소를 빼주기만 하면 될 일이었다. 

check 변수를 통해 뒤집힌 상태인지 아닌지를 체크해주면서 만들었더니 성공했다. 

 

코드는 다음과 같다. 

import sys
from collections import deque

t = int(sys.stdin.readline().strip())

for i in range(t):
    flag = 1
    check = True
    ins = sys.stdin.readline().strip()
    n = int(sys.stdin.readline().strip())
    deq = deque(sys.stdin.readline().strip('[]\n').split(','))
    if deq[0]=='':
        deq.pop()
    for j in range(len(ins)):
        if ins[j] == 'R':
            check = not check
        else:
            if len(deq) == 0:
                print('error')
                flag = 0
                break
            elif check == True:
                deq.popleft()
            else:
                deq.pop()
    if flag == 0:
        pass
    else:
        if len(deq) == 0:
            print('[]')
        elif check == True:
            print('[', end='')
            for k in range(len(deq)- 1):
                print(deq[k], end=',')
            print(deq[len(deq)-1], end='')
            print(']')
        else:
            print('[', end='')
            for k in range(len(deq) - 1, 0, -1):
                print(deq[k], end=',')
            print(deq[0], end='')
            print(']')

계속해서 수정하다 보니 쫌 지저분하다 여기서 더 깔끔하게 줄일 수 있을 것 같다.

 

성공!

반응형

'Computer Science > 백준' 카테고리의 다른 글

백준 1927번 최소 힙  (0) 2021.08.27
백준 11286번 절댓값 힙  (0) 2021.08.27
백준 18258번 큐2  (0) 2021.08.17
백준 2164번 카드2  (0) 2021.08.17
백준 1021번 회전하는 큐  (0) 2021.08.13