명령에 따라 pop하거나 reverse하는 문제이다. 새로운 배열을 하나 더 만들어서 거꾸로 넣어주는 식으로 R명령을 수행하고, pop()을 사용하여 D 명령을 수행하려고 했지만, 입력의 수와 코드의 간결성을 생각하면 딱히 좋은 풀이는 아닌 것 같다.
내가 사용한 방법은 front라는 변수를 선언하여 앞부분의 인덱스를 넣어주는 방법이다. 만약 R명령이 들어와서 뒤집는 경우에는 front에 -1을 넣어 마지막 원소를 가리키게하고, D명령을 수행할 때는 front가 가리키는 값을 pop해주는 식이다. 그렇게 하면, 보조 리스트를 계속하여 생성하거나, 뒤에 append하는 등의 시간 초과 요인에 대해 걱정할 필요가 없다.
##함수 선언 부분
##변수 선언 부분
command = []
index_2 = 0
front = 0
isError = 0
##메인 함수 부분
if __name__ == "__main__":
T = int(input())
for i in range(T):
isError = 0
front = 0
command = input()
N = int(input())
number = input()
number = number.rstrip(']') #괄호와 ,를 포함하여 입력을 받았기 때문에,
number = number.lstrip('[') #strip과 split을 사용하여 원소만 저장해준다.
number = number.split(',')
for j in command:
if j == 'R': #R명령이면,
if front == 0: #첫번째 원소를 가리키는 의미인 front에
front = -1 #-1을 넣어 마지막 원소를 가리키게한다.
else: #이미 마지막 원소를 가리키고있다면
front = 0 #첫번째 원소를 가리키게한다.
elif j == 'D': #D명령이면,
if N == 0: #원소의 개수가 없으면
print("error") #error출력
isError = 1
break #탈출
number.pop(front) #front가 가리키는 원소를 pop해준다.
N -= 1 #개수 1개 감소
if not isError: #error가 아닌 경우에
print('[',end="")
if front == -1: #뒤집어 놓은 상태이면
for j in range(len(number)-1,-1,-1): #거꾸로 출력
print(number[j],end="")
if j == 0:
print(']')
break
print(',',end="")
else: #뒤집어 놓은 상태가 아니면,
print(','.join(number),end="") #그대로 출력
print(']')
입력을 받을 때 괄호와 , 를 포함한 문자열로 입력을 받아서 그것을 없애고 원소를 얻는 과정이 조금 번거로웠다.