https://www.acmicpc.net/problem/5430
#Solution
생각해보면 간단한 것인데 너무 오래 풀었다. 굳이 덱을 이용하지 않아도된다!
앞에서 빼주는 것을 단순히 pop하면 리스트가 전부 앞으로 당겨지므로 시간이 굉장히 오래걸린다.
순서에 따라 뒤집는 것도 당연 오래걸린다.
먼저 R이 홀이냐 짝이냐에 따라 앞뒤에서 빠지는 것이 결정되므로 R의 개수는 그다지 중요하지 않다.
따라서 앞에서 빠지는 것은 D_front에 하나씩 더해주면서 답을 출력할 때 슬라이싱을 하면되고
뒤에서 빠지는 것은 바로 pop하여 없애주면 된다. 시간 복잡도는 O(N)
case = int(input())
for _ in range(case):
function = list(input())
num = int(input())
arr = eval(input())
error = False
R_count = 0 #홀/짝 뒤집힌 횟수용
D_front = 0 #앞에서 없어지는 수
for func in function:
if func == 'R':
R_count += 1
else:
try:
if R_count % 2 == 0:
D_front += 1 #앞에서는 슬라이싱으로 나중에 뺴줌
else:
arr.pop() #이건 뒤에서 바로 뺴줌
except:
error = True
break
#에러 걸러주기
if error or D_front > len(arr):
print('error')
continue
#R개수에 따른 정답 변형
if R_count % 2 == 0:
answer = arr[D_front:]
else:
answer = list(reversed(arr[D_front:]))
#출력함수
print("[", end='')
for i in range(len(answer)):
if i == len(answer) - 1:
print(answer[i], end = '')
else:
print("%s," %(answer[i]), end='')
print("]")
'Programming [Python] > 백준 알고리즘 솔루션' 카테고리의 다른 글
#151 백준 파이썬 [9020] 골드바흐의 추측 (0) | 2019.10.25 |
---|---|
#150 백준 파이썬 [4948] 베르트랑 공준 (0) | 2019.10.25 |
#148 백준 파이썬 [11866] 조세퍼스 문제 0 (0) | 2019.10.24 |
#147 백준 파이썬 [1932] 정수 삼각형 (0) | 2019.10.24 |
#146 백준 파이썬 [2606] 바이러스 - BFS (0) | 2019.10.23 |