글 작성자: 망고좋아
반응형

5430, AC

📁 문제 출처

 

💡 생각

  • 일단 문제 그대로 하나씩 풀어나갔지만 시간 초과가 발생했다.

 

시간 초과 코드

t = int(input())

for i in range(t):
    p = input()
    n = int(input())
    arr = list(map(int,input()[1:-1].replace(',', '')))

    for i in p:
        if i == 'R':
            arr = arr[::-1]
        elif i == "D":
            if len(arr) == 0:
                break
            else:
                arr.pop(0)
    if arr == []:
        print('error')
    else:
        print(arr)

 

deque 사용 - 시간 초과

from collections import deque

t = int(input())

for i in range(t):
    p = input()
    n = int(input())
    arr = deque( map(int, input()[1:-1].replace(',', '')))

    for i in p:
        if i == 'R':
            arr.reverse()
        elif i == "D":
            if len(arr) == 0:
                break
            else:
                arr.popleft()
    if len(arr) == 0:
        print('error')
    else:
        print(list(arr))
  • 찾아보니 R이 들어올 때마다 reverse하면 무조건 시간 초과
  • flag를 사용해서 뒤집기 여부를 확인하여 마지막 한 번만 실행

 

🛠 나의 코드

from collections import deque

t = int(input())

for i in range(t):
    p = input()
    n = int(input())
    arr = input()[1:-1].split(',')

    queue = deque(arr)

    flag = 0

    if n == 0:
        queue = []

    for j in p:
        if j == 'R':
            flag += 1
        elif j == 'D':
            if len(queue) == 0:
                print("error")
                break
            else:
                if flag % 2 == 0:
                    queue.popleft()
                else:
                    queue.pop()

    else:
        if flag % 2 == 0:
            print("[" + ",".join(queue) + "]")
        else:
            queue.reverse()
            print("[" + ",".join(queue) + "]")

 

✔️ 배운 점 및 주의할 점

  • 빈 배열 []이 들어올 수 있다. 따라서 n == 0일 때 빈 배열로 초기화를 해줘야 한다.

 

📌 참고한 코드

반응형