이 문제는 구현이 어려웠던 문제는 아니고 그 안에 개념을 떠올리기가 쉽지 않았었던것 같다.(모든 알고리즘 문제가 그런건가...)
끝에 출력 이슈도 있었다.....
t = int(input())
def func(x) :
if x != '' :
return int(x)
for _ in range(t) :
commands = list(input())
n = input()
array = list(filter(lambda x : x != None, list(map(func, input().replace('[', '').replace(']', '').split(',')))))
flag = True
reverse_count = 0
for cmd in commands :
if cmd == 'R' :
reverse_count += 1
elif cmd == 'D' :
if len(array) == 0 :
flag = False
break
else :
if reverse_count % 2 == 1 :
array.pop()
else :
array.pop(0)
if flag :
if reverse_count % 2 == 1 :
array.reverse()
# print(array)
if len(array) != 0 :
print("[" + ",".join(list(map(str, array))) + "]")
else :
print("[]")
else :
print('error')
처음 접근했었던 R이 등장할때마다 reverse를 하게 되면 무조건 시간 초과에 걸리게 된다.
매번 reverse를 하는 것이아니라 스택을 이용해보자
1. reverse_count %2 == 0
뒤집지 않은 형태와 동일하게 되므로 맨처음에서 원소를 빼주면 된다
2. reverse_count % 2 == 1
반대로 되어있는 상태이므로 끝에서 원소를 빼주면 된다
마지막에 뒤돌아서 출력해줄지 원래되로 출력해줄지만 판단하고 Print문을 문제에서 요구하는 것과 동일하게 하면 된다.(중간에 간격 들어가면 안되고 철저히 해야한다..)
https://www.acmicpc.net/problem/5430
'알고리즘' 카테고리의 다른 글
최소공배수 [백준 1934] - python (0) | 2021.12.07 |
---|---|
최대 힙[백준 11279] - python (0) | 2021.12.05 |
버블 소트[백준 1377] - python (0) | 2021.12.05 |
후위 표기식[백준 1918] - python (0) | 2021.12.05 |
가장 긴 증가하는 부분 수열 2 [백준 12015] - python (0) | 2021.12.02 |