반응형
백준 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 |