https://www.acmicpc.net/problem/5430
문제를 읽고 deque으로 풀어야겠구나 라고 생각하고 풀어나갔다.
R을 만났을 때 deque.reverse()로 직접 deque을 뒤집었다.
from collections import deque
t = int(input())
for _ in range(t):
try:
cmd = list(input())
num = int(input())
temp = list(map(int,input().lstrip('[').rstrip(']').split(',')))
queue = deque(temp)
#cmd를 하나씩 실행
for i in cmd:
if i == 'R':
queue.reverse()
elif i == 'D':
queue.popleft()
#결과 출력
print('[',end='')
for i in range(len(queue)):
print(queue[i],end='')
if i!=len(queue)-1:
print(',',end='')
print(']')
except:
print('error')
결과는 시간초과..
직접 queue.reverse은 O(N)이기 때문에 시간 초과가 뜨는 것 같다.
그럼 reverse를 쓰지 않고 해결해야 하는데..
reverse라는 변수를 만들어서 True이면 요소를 지워야할 때 마지막 값을 없애고, reverse가 false이면 첫 값을 없애는 것으로 구현했다.
from collections import deque
t = int(input())
for _ in range(t):
try:
cmd = list(input())
num = int(input())
temp = list(map(int,input().lstrip('[').rstrip(']').split(',')))
queue = deque(temp)
reverse = False
#cmd를 하나씩 실행
for i in cmd:
if i == 'R':
if reverse == True:
reverse = False
else:
reverse = True
elif i == 'D':
if reverse == True:
queue.pop()
else:
queue.popleft()
#결과 출력
print('[',end='')
#리버스가 아닐 경우
if reverse == False:
for i in range(len(queue)):
print(queue[i],end='')
if i!=len(queue)-1:
print(',',end='')
else: #리버스일 경우
for i in range(len(queue)-1,-1,-1):
print(queue[i],end='')
if i!=0:
print(',',end='')
print(']')
except:
print('error')
틀렸다고 뜬다??
질문 게시판에 거의 모든 반례를 실행해봤는데, 맞다..
하나 걸리는 것이 있는데 error를 판단할 때 그냥 try-except로 구현한 것이다.
err 걸리는 상황을 if 문으로 바꿔보자..
from collections import deque
t = int(input())
for _ in range(t):
cmd = list(input())
num = int(input())
temp = input().strip('[]')
if temp:
queue = deque(map(int, temp.split(',')))
else:
queue = deque()
reverse = False
err = False
#cmd를 하나씩 실행
for i in cmd:
if i == 'R':
if reverse == True:
reverse = False
else:
reverse = True
elif i == 'D':
if not queue: #큐가 비어 있을 경우
err = True
break
if reverse == True:
queue.pop()
else:
queue.popleft()
if err:
print('error')
else:
#결과 출력
print('[',end='')
#리버스가 아닐 경우
if reverse == False:
for i in range(len(queue)):
print(queue[i],end='')
if i!=len(queue)-1:
print(',',end='')
else: #리버스일 경우
for i in range(len(queue)-1,-1,-1):
print(queue[i],end='')
if i!=0:
print(',',end='')
print(']')
문제가 어렵진 않았는데, 실수할 부분이 꽤 많은 문제인 것 같다😒
'백준' 카테고리의 다른 글
[백준] 14500번: 테트로미노 (파이썬) (0) | 2025.01.06 |
---|---|
[백준] 16928번: 뱀과 사다리 게임 (파이썬) (1) | 2025.01.06 |
[백준] 7569번: 토마토 (파이썬) (0) | 2024.12.30 |
[백준] 10026번: 적록색약 (파이썬) (0) | 2024.12.29 |
[백준] 11403번: 경로 찾기(파이썬) (1) | 2024.12.28 |