728x90
반응형
<문제 링크>
https://www.acmicpc.net/problem/5430
<풀이>
선영이가 새로운 언어인 AC를 만들었는데 R과 D라는 메소드만 가지고 있다고 한다.
R은 배열에 있는 숫자를 뒤집는 메소드이며, D는 첫번째 숫자를 삭제하는 메소드이다.
데큐를 이용하면 쉽게 문제를 풀 수 있다.
D에 의해 삭제 되는 첫번째 숫자를 on_left를 통해 pop()을 할 지, popleft()를 할 지 결정한다.
그래서 현재 실행 메소드가 R이라면 on_left 상태를 변경해 D가 첫번째 숫자를 삭제할 수 있도록 한다.
그리고 error가 True라면 배열이 빈 상태에서 D 메소드가 호출된 것이기 때문에 "error"를 출력해준다.
삭제를 잘 수행했다면, 출력 형식에 맞게 잘 출력해주면 된다.
우선 on_left에 따라 dq를 그대로 출력해야 할 지, 아니면 거꾸로 출력해야 할 지를 판다한 다음에
Python의 f"" 기능과 join() 메소드를 통해 출력 형식에 맞게 출력한다.
<코드>
p[]: 수행할 함수들
n: 배열의 길이
arr[]: 수가 담긴 배열
on_left: 삭제 and 출력 방향 (R에 따라 OnOff)
error: 에러 판단 트리거 (빈 배열에서 D 수행 시 ON)
dq[]: 자료구조 덱
import sys
from collections import deque
if __name__ == '__main__':
T = int(sys.stdin.readline().rstrip())
for _ in range(T):
'''
p: 수행할 함수들
n: 배열의 길이
arr: 수가 담긴 배열
'''
p = list(sys.stdin.readline().rstrip())
n = int(sys.stdin.readline().rstrip())
arr = input()[1:-1].split(',')
on_left = True # 왼오 트리거 -> 처음은 왼쪽 기준임
error = False # 에러 판단 트리거
if arr[0] != '': # 빈 배열이 아니면
dq = deque(list(map(int, arr)))
else: # 빈 배열이면
dq = deque([])
for order in p: # 수행할 함수
if order == "R": # R은 숫자의 순서를 뒤집음
on_left = not on_left # 그래서 트리거 온오프
else:
if len(dq) == 0: # 함수가 D인데 배열의 크기가 0이라면
error = True # 에러 발생
break
else:
if on_left: # 왼쪽 첫번째 숫자 삭제
dq.popleft()
else: # 오른쪽 첫번째 숫자 삭제
dq.pop()
if error: # 에러면
print("error")
else: # error 상태가 아니면 리스트 프린트
results = list(dq)
if not on_left: # 왼쪽이 아니라 오른쪽이 기준이면
results.reverse()
print(f"[{','.join(list(map(str, results)))}]") # 출력 형식에 맞게 출력
728x90
반응형
'~2023' 카테고리의 다른 글
[Python] 백준 14651번 문제, 걷다보니 신척역 삼(Large) (0) | 2021.08.20 |
---|---|
[Python] 백준 2636번 문제, 치즈 (0) | 2021.08.20 |
[Python] 백준 14499번 문제, 주사위 굴리기 (0) | 2021.08.02 |
[Python] 백준 6118번 문제, 숨바꼭질 (0) | 2021.08.02 |
[MAC/M1/Issue] M1 칩에서 pod install 이슈 해결하기 (0) | 2021.07.31 |