[BOJ] 5430

nerry·2022년 2월 4일
0

알고리즘

목록 보기
33/86

문제

me

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

for _ in range(t):
    p=list(input().strip())
    n=int(input())
    arr=input().strip().strip('[').strip(']').split(',')
    dir=1 # 정순
    index=0 # 현재 index
    front=0
    back=n-1
    end=back # 마지막 index
    popped=0
    for d in p:
        if d == 'R':
            dir=-dir
            if dir==1:
                back=index
                index=front
                end=back
            else:
                front=index
                index=back
                end=front
            #end= -1 if end==n else n
        elif d=='D':
            index+=dir
            popped+=1
    if popped>n:  #(dir==1 and index>end) or (dir==-1 and index<end):
        print('error')
    else:
        print('[',end='')
        for i in range(index,end+dir,dir):
            print(arr[i],end='')
            if i != end : print(',',end='')
        print(']')

변수를 세워서 했다. 약간 비효율적인 것도 많은데 pop을 하는 것은 너무 소비가 클것 같고 또, 조건문으로 구분하는 것보다 효율적이지 않을까? 라는 생각을 했지만 메모리가 조금 아쉬울 것 같긴 하다.
1. dir을 기준으로 index를 움직인다.
2. front,back을 통해 R시 배열의 마지막을 구분하도록 했다.
3. 틀렸습니다.를 두번 보았는데 질문글 여기에서 3번을 보고 깨달았다. 빈 배열에서 D를 해야 error인데 그걸 놓쳤다.

solution

import sys
from collections import deque

t = int(input())

for i in range(t):
    p = sys.stdin.readline().rstrip()
    n = int(input())
    arr = sys.stdin.readline().rstrip()[1:-1].split(",")
    queue = deque(arr)

    rev, front, back = 0, 0, len(queue)-1
    flag = 0
    if n == 0:
        queue = []
        front = 0
        back = 0

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

deque를 이용해 pop하는 방식
reverse를 한번만 하도록

출처

profile
터벅터벅 개발(은좋은)자 로그

0개의 댓글