반응형
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
해결 방법 : deque 자료구조 사용
- R동작 : 현재 방향이 정방향인지 역방향인지를 나타내는 boolean 변수 cur로 판단
- D동작 : 리스트 양쪽에서 O(1)로 삭제가 가능한 deque 자료구조를 사용
- cur이 True이면 popleft()
- cur이 False이면 pop()
- 하지만 사실상 문제가 원하는 대로 문자열 입력, 출력 하는데 신경쓸게 더 많다.
- 출력시 리스트를 반환하면 오답. 리스트 모양으로 문자열을 반환해줘야 한다.. :(
- 리스트를 반환하면 [a, b, c] 처럼 ',' 다음에 띄워 쓰기가 되는데 출력 형식은 [a,b,c].
import sys
input = sys.stdin.readline
from collections import deque
def solution(p, arr):
arr = deque(arr)
cur = True # 정방향, False : 역방향
for i in p: # 동작 실행
if i == 'R': # 뒤집기 논리 동작
cur = False if cur else True
elif i == 'D': # 현 방향에 따라 리스트 요소 제거
if len(arr) == 0: return 'error' # 리스트에 값이 없으면 'error'
if cur:
arr.popleft()
else:
arr.pop()
arr = list(arr) if cur else list(arr)[::-1] # 마지막 방향이 역방향이면 리스트 뒤집기
return '[' + ','.join(arr) + ']' # 출력 포맷
if __name__ == '__main__':
p_list = []
arr_list = []
T = int(input())
for i in range(T):
p = input().strip()
n = int(input().strip())
arr = input().strip()[1:-1].split(',')
arr = [] if arr == [''] else arr
p_list.append(p)
arr_list.append(arr)
for p, arr in zip(p_list, arr_list):
result = solution(p, arr)
print(result)반응형
'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글
| 백준 1158 : 요세푸스 문제 (0) | 2021.06.08 |
|---|---|
| 백준 문제 추천 리스트! (0) | 2021.06.08 |
| 백준 1033 : 칵테일 (0) | 2021.05.29 |
| 2021 Dev-Matching: 웹 백엔드 개발자(상반기) 문제풀이 (0) | 2021.05.24 |
| 매출 하락 최소화 (0) | 2021.05.19 |