문제

[백준] AC (Gold 5)

요약

  • 정수 배열이 주어지고, 그 배열에 행할 함수 목록이 주어진다.
  • R 함수는 배열을 뒤집고, D 함수는 배열의 첫 번째 요소를 제거한다.
  • D 함수를 실행 시, 제거할 요소가 없으면 error 를 반환한다.
  • 함수를 실행한 결과 또는 error 을 반환하자.

분류

  • 구현
  • 자료구조 (덱)
  • 문자열

풀이

1. 덱 사용 X, 그냥 풀이

  • 덱을 사용하면 “정석”으로 풀리겠으나, 덱을 사용하지 않고 풀었다.
  • R 이 나오면, reverse의 상태를 갱신한다. 만약 뒤집어진 상태라면(reverse == True) end 의 값을 1 줄인다. 뒤집어지지 않은 상태라면(reverse == False) start의 값을 1 늘린다.
  • 리스트 슬라이싱을 통해 값을 반환한다.


T = int(input())
inp = [
    [input(), int(input()), input()] for _ in range(T)
]

for f, n, arr in inp:
    arr = arr[1:-1].split(',')

    reverse = False
    start = 0
    end = n

    for func in f:
        if func == 'R':
            reverse = not reverse
        elif func == 'D':
            if reverse:
                end -= 1
            else:
                start += 1

    if start > end:
        print("error")
    else:
        result = arr[start:end]
        if reverse:
            result.reverse()
        print('[' + ','.join(result) + ']')

2. 덱 사용

from collections import deque

T = int(input())
inp = [
    [input(), int(input()), input()] for _ in range(T)
]

for f, n, arr in inp:
    arr = deque(arr[1:-1].split(',')) if arr != '[]' else deque()
    reverse = False

    for func in f:
        if func == 'R':
            reverse = not reverse
        elif func == 'D':
            if not arr:
                print("error")
                break
            if reverse:
                arr.pop()
            else:
                arr.popleft()
    else:
        if reverse:
            arr.reverse()
        print('[' + ','.join(arr) + ']')