728x90
문제
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
# 첫 시도는 문자열 슬라이싱으로 해결하는데 복잡해서 고민하다가 deque으로 구현하면 쉽다고 판단
# R이 들어올때마다 reverse를 해주면 시간초과 -> 그럼 어떻게 ?
# R의 횟수를 저장하여 홀수로 들어오면 pop을 해주고 마지막에 reverse를 해준다. R의 횟수가 짝수면 popleft만 해주고 그대로 출력해주면 된다. (deque 사용)
정답
from collections import deque
t = int(input())
for _ in range(t):
p = input()
n = int(input())
x = input()[1:-1].split(",") # ,기준으로 양 []을 제거하여 x에 저장
q = deque(x) # x를 deque로 저장
flag = 0 # 뒤집기(R) 횟수 저장
if n == 0: # 배열에 들어있는 수가 0일 때 빈 배열로 초기화
q = []
for i in p:
if i == "R": # R이면 뒤집기 flag 횟수 1증가
flag += 1
elif i == "D": # D이고 비어있는 q이면 error 발생
if len(q) == 0:
print("error")
break
else: # D이고 비어있지 않는 q이고 뒤집기 횟수가 짝수면 원래 q랑 같기 때문에 popleft
if flag % 2 == 0:
q.popleft()
else: # 뒤집기 횟수가 홀수면 reverse 한다는 의미이기 때문에 pop
q.pop()
else: # 배열에 들어있는 수가 0이 아니면 원소가 들어있다는 의미
if flag % 2 == 0: # 뒤집기 횟수가 짝수면 원래 q랑 같으니깐 그대로 출력
print("["+",".join(q)+"]") # 양쪽 [] 과 join 함수를 사용해 ,를 기준으로 문자열 처리해준 뒤 출력해준다.
else: # 뒤집기 횟수가 홀수면 한번 뒤집어야 하니깐 reverse 후 출력
q.reverse()
print("["+",".join(q)+"]")
'알고리즘 > baekjoon' 카테고리의 다른 글
[알고리즘/baekjoon] 10026_적록색약(python) (0) | 2021.12.02 |
---|---|
[알고리즘/baekjoon] 1107_리모컨(python) (0) | 2021.11.30 |
[알고리즘/baekjoon] 16928_뱀과 사다리 게임(python) (0) | 2021.11.30 |
[알고리즘/baekjoon] 7576_토마토(python) (0) | 2021.11.27 |
[알고리즘/baekjoon] 7569_토마토2(python) (0) | 2021.11.27 |
댓글