문제 링크
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
풀이
- 배열로 풀었더니 시간 초과
- data에 숫자를 담아두고
R인 경우 : data.reverse() 실행하여 순서 거꾸로
D인 경우 : data = data[1:] 실행하여 처음 숫자 제거
# 시간 초과
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
s = input()
n = int(input())
data = input()
if n == 0:
data = []
else :
data = data[1:-2].split(',')
print(data)
result = True
for i in s:
if i == 'R':
data.reverse()
if i == 'D':
if data :
data = data[1:]
else:
print('error')
result = False
break
if result : print("[" + ",".join(data) + "]")
- deque 사용해서 풀이
- index로 방향을 구분한다.
index가 1이면 현재 방향
0이면 거꾸로 뒤집은 방향
따라서 1일 때는 숫자 제거시 큐 popleft() 실행
0일 때는 숫자 제거 시 큐 pop() 실행
- 마지막 출력 시 방향 확인하여
1 이면 큐에 담긴 순서대로 출력
0이면 큐를 뒤집어서 출력
import sys
from collections import deque
input = sys.stdin.readline
t = int(input())
for _ in range(t):
s = input()
n = int(input())
data = input()
# 숫자의 개수가 0이 아니면
if n :
# 처음과 끝에 괄호 제거해주고 ',' 기준으로 잘라서 숫자만 넣어줌
q = deque(data[1:-2].split(','))
else:
q= deque()
result = True
# 1은 현재 방향, 0은 거꾸로 뒤집은 방향
# 1인 경우 popleft(), 0인 경우 pop()
index = 1
for i in s:
# 방향 바꿔주기
if i == 'R':
if index == 1 :
index = 0
else:
index = 1
# 방향에 따라 처음 숫자 제거
if i == 'D':
if q:
if index == 1 :
q.popleft()
else:
q.pop()
else:
print('error')
result = False
break
if result :
if index :
print("[" + ",".join(q) + "]")
# 방향이 바뀌었으면 reverse 해서 출력
else:
q.reverse()
print("[" + ",".join(q) + "]")
'개발 > algorithm' 카테고리의 다른 글
[백준 7569번] 토마토 - python (0) | 2022.02.17 |
---|---|
[백준 7576번] 토마토 -python (0) | 2022.02.17 |
[백준 6064번] 카잉 달력 - python (0) | 2022.02.17 |
[백준 1389번] 케빈 베이컨의 6단계 법칙 - python (0) | 2022.02.17 |
[백준 11403번] 경로 찾기 -python (0) | 2022.02.17 |