골드 V

💡문제 분석 요약

구현

💡알고리즘 설계

함수 명령어는 list로 만들어 하나씩 돌면서 수행한다.

numbers는 list로 만들어 주기 위해 앞 뒤의 괄호를 제거하고 (replace로 대체) 만약 제거하니 아무것도 안남으면 [] split이 불가하므로 빈 리스트를 할당한다.

R인 경우, 실제로 뒤집는게 아닌 뒤집힌 횟수를 센다.

횟수를 기반으로 뒤집은 횟수가 짝수면 원래 리스트의 앞에서 빼므로 del number[0]으로 앞의 값을 빼준다. 이때, pop으로 하면 시간초과가 나므로 del로 접근한다.

만약, 뒤집은 횟수가 홀수면 뒤집혔으므로 뒤에 숫자를 빼준다.

출력할 때, 뒤집힌 수의 짝홀로 뒤집혀서 출력할지 말지를 결정한다.

💡코드


import sys
input= sys.stdin.readline
t = int(input())

for _ in range(t):
    isError = False
    reverse = 0
    p = list(input().strip())
    n = int(input())
    numbers = input().strip()
    numbers =numbers.replace('[','')
    numbers= numbers.replace(']','')
    if numbers=='':
        numbers = []
    else:
        numbers = list(map(int,numbers.split(',')))
    for func in p:
        if func=='R':
            reverse +=1
        else:
            if numbers:
                if reverse%2==0:
                    del numbers[0]
                else:
                    numbers.pop(-1)
            else:
                print('error')
                isError =True
                break
    
    if not isError:
        if reverse%2==1:
            numbers = numbers[::-1]
            print('[',end='')
            print(*numbers,sep=',',end=']\n')
        else:
            print('[',end='')
            print(*numbers,sep=',',end=']\n')
                
                    

💡오류 난 이유

  • reverse에서 실제로 reverse를 하니 시간 초과가 났다.
  • 출력 형식을 맞추지 못했다.

💡 기억할 것

  • 출력 형식을 제대로 파악하자.
  • 문제 그대로 뒤집거나 바꾸려고 하지 말고 다른 방법이 없는지 고민하자. 특히 reverse나 pop같은 경우.