백준 5430번 AC 파이썬

박슬빈·2021년 12월 1일
0

알고리즘

목록 보기
37/40

문제

입력 , 출력

solution

import sys
from collections import deque

input = sys.stdin.readline
n = int(input())
for i in range(n):
    a = input().strip()
    m = int(input())
    flag = 1
    arr = input().strip()
    dq = deque(arr[1:-1].split(','))
    if m == 0:
        dq = deque()
    R = 0
    for i in range(len(a)):
        if a[i] == 'R':
            R += 1
        elif a[i] == 'D':
            if len(dq) == 0:
                print('error')
                flag = 0
                break
            else:
                if R % 2 == 0:
                    dq.popleft()
                else:
                    dq.pop()

    if flag == 0:
        continue
    else:
        if R % 2 == 0:
            print('[' + ",".join(dq) + ']')
        else:
            dq.reverse()
            print('[' + ",".join(dq) + ']')

설명

키포인트

  1. 입력 배열의 파싱 , 0번째 인덱스와 마지막 인덱스를 제외하면
    [1,2,3,4] = > 1,2,3,4 로 만들어지므로
    arr[1:-1] 로 하면 1,2,3,4 라는 문자열이 만들어진다.
    여기서 split(',') 하면 ['1','2','3','4'] 가 만들어진다.
  2. R을 할 시에는 배열을 reverse 해준다.
    하지만 n번의 연산이 필요하다.
    R의 최대 횟수 100,000 , 배열의 최대 크기 100 , 테스트케이스 100개
    100 100,000 100 = 1,000,000,000 1억번의 시간이 대략 소요가 된다. 시간초과가 날수도 있기때문에
    R을 짝수번 했을경우에는 배열을 reverse시키지 않아도 괜찮다.
    그래서 R이 나왔을 경우에는 카운트를 해줘서
    D가 나왔을때 R이 짝수일경우에는 popleft , 홀수일경우에는 pop 을 해주고
    마지막에 R이 홀수일 경우에 배열을 reverse해서 출력해주면 된다.

예외처리

배열의 크기가 0인 경우에 D(삭제)를 실행할 경우 error메세지를 출력한다.
데크의 크기가 0 인경우에 D를 실행할 경우 , 입력 배열의 개수가 0 인 경우
두가지 경우를 생각하면 된다.

profile
이것저것합니다

0개의 댓글