문제
풀이
import sys
from collections import deque
T = int(sys.stdin.readline())
for _ in range(T):
func = list(sys.stdin.readline().rstrip())
n = int(sys.stdin.readline())
queue = deque(sys.stdin.readline().rstrip()[1:-1].split(","))
if n == 0:
queue = deque()
error = False
cnt_R = 0
for i in range(len(func)):
if func[i] == 'D':
if queue:
if cnt_R % 2 == 1:
queue.pop()
else:
queue.popleft()
else:
error = True
break
else:
cnt_R += 1
if error:
print('error')
else:
if cnt_R % 2 == 1:
queue.reverse()
print('[' + ','.join(queue) + ']')
테스트 개수만큼 입력받은 함수로 배열을 연산하는 문제.
- 두 가지 함수 뒤집기(R)와 버리기(D)를 구현하기 위해 deque을 사용했다.
- 입력이 [1,2,3,4] 형태로 들어오기 때문에 1) [1:-1]을 사용해서 괄호를 자르고 2) split(",")을 사용해서 쉼표 기준으로 값을 구분해 queue 변수에 담았다.
- n == 0인 경우 queue를 deque()로 초기화했다.
* 초기화하지 않으면 deque(['']) 처럼 나타난다.
에러가 발생한 경우를 확인하기 위해 error 변수를 만들었다.
* 출력 조건: 빈 배열에서 D를 사용한 경우 error 출력
뒤집는 횟수를 세기 위해서 cnt_R 변수를 만들었다.
- 반복문에서 함수값이 R일 때마다 reverse()를 실행하는 대신 cnt_R의 값을 1씩 더하고 D가 나왔을 때 연산하게 했다.
- D가 나오면 cnt_R % 2 == 1인 경우 reverse() 대신 맨 끝값을 버리고(pop) 0인 경우 첫번째 값을 버린다(popleft)
- reverse() 함수는 최종 출력에서 필요한 경우 딱 한 번만 사용한다.
reverse()대신 pop()쓰는거 생각도 못했네,,,🤦♂️
백준 5430번: AC
'Problem Solving > Baekjoon Online Judge' 카테고리의 다른 글
[BOJ/백준] 10799번 쇠막대기 | 스택 | 파이썬 (0) | 2021.09.29 |
---|---|
[BOJ/백준] 2630번 색종이 만들기 | 분할정복 | 파이썬 (0) | 2021.09.28 |
[BOJ/백준] 1874번 스택 수열 | 파이썬 (2) | 2021.08.26 |
[BOJ/백준] 10828번 스택 | 파이썬 (🌠sys.stdin.readline으로 시간 초과 해결) (2) | 2021.08.24 |
[BOJ/백준] 1697번 숨바꼭질 | BFS | 파이썬 (0) | 2021.08.11 |