[백준] 5430번: AC

8757 단어 baekjoonbaekjoon

문자열 파싱의 비중이 높은 문제였다. 시간복잡도를 줄이기 위해 실제 배열에서 요소를 삭제하거나 뒤집는 대신 인덱스의 시작점과 끝점을 조작한 후 출력하는 방식으로 구현하였다.

명령어 R을 입력받을 때마다 flag를 반전시키고, 이에 따라 D가 입력됐을 때 시작점을 옮길지 끝점을 옮길지 결정한다. 명령이 끝나면 flag의 값에 따라 정방향 또는 역방향으로 입력받은 배열을 출력한다.

import sys

input = sys.stdin.readline
T = int(input().rstrip())

for _ in range(T):
    p = input().rstrip()
    n = int(input().rstrip())
    a = input().rstrip()
    arr = list(map(int, a[1:-1].split(","))) if len(a) > 2 else []
    flag, isError = True, False
    start, end = 0, n
    
    for oper in p:
        if oper == "R":
            flag = not flag
        else:
            if start >= end:
                isError = True
                break
            if flag:
                start += 1
            else:
                end -= 1

    if isError:
        print("error")
    elif flag:
        print("[", end="")
        for i in range(start, end):
            print(arr[i], end="")
            print(",", end="") if i < end - 1 else ""
        print("]")
    else:
        print("[", end="")
        for i in range(end - 1, start - 1, -1):
            print(arr[i], end="")
            print(",", end="") if i > start else ""
        print("]")

좋은 웹페이지 즐겨찾기