오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-09 00:00
관리 메뉴

우노

[Implementation] 백준 5430번 “AC” Python 풀이 본문

Algorithm/Implementation

[Implementation] 백준 5430번 “AC” Python 풀이

운호(Noah) 2022. 11. 12. 15:27

문제 링크

풀이

  • R 함수 시, 정말 배열의 모든 원소를 뒤집는다면, 시간 초과가 발생합니다.
    • RR -> 그대로이므로 뒤집을 필요가 없습니다.
  • 따라서, 모든 함수에 등장한 R의 개수가 홀수일 경우에만, 모든 함수들을 처리한 뒤, 마지막으로 reverse를 수행하면 됩니다.
    • 함수 중간에 D가 등장하는 경우에는,
    • 현재까지 등장한 R의 개수에 따라,
    • 배열의 모든 원소를 ‘유지’ 또는 ‘reverse’ 한다고 가정한 뒤,
    • deque의 popleft 또는 pop을 사용해 원소를 삭제하면 됩니다.
  • 추가 예외처리
    • 빈 배열(n이 0인 경우)이 입력으로 들어올 수 있습니다.
    • 하지만, 배열이 비어있어도 R 함수는 실행할 수 있습니다.

코드

import sys
from collections import deque

# 테스트 케이스 개수
t = int(sys.stdin.readline())

for _ in range(t):

    # 수행할 함수
    total_command = sys.stdin.readline().rstrip()

    # 배열에 들어있는 수의 개수
    n = int(sys.stdin.readline())

    # 문자열에서 '[', ']'를 제거하고,
    # ',' 기준으로 분리한 뒤, queue에 담기
    q = deque(sys.stdin.readline().rstrip()[1:-1].split(','))

    # 배열이 비어있다면
    if (n == 0):
        # 배열이 비어있어도, R 함수는 문제 없이 실행할 수 있으므로, q를 빈 배열로 초기화
        q = []

    # R 함수의 개수
    r_count = 0

    # 에러 여부
    error = False

    # 순서대로 함수 실행
    for command in total_command:

        # R 함수라면
        if (command == 'R'):

            # R 함수의 개수 추가
            r_count += 1

        # D 함수라면
        else:

            # 배열에 수가 남아있을 경우
            if (q):

                # 현재까지 등장한 R의 개수가 홀수일 경우
                if (r_count % 2 == 1):

                    # reverse 했다고 가정한 뒤, pop 실행
                    q.pop()

                # 현재까지 등장한 R의 개수가 홀수일 경우
                else:

                    # 변함 없는 상태라고 가정한 뒤, popleft 실행
                    q.popleft()

            # 배열에 수가 남아있지 않을 경우
            else:
                error = True
                break

    # 에러가 발생했다면
    if (error == True):
        print('error')

    # 에러가 발생하지 않았다면
    else:

        # 모든 함수에 등장한 R의 개수가 홀수라면, 전체 배열 뒤집기
        if (r_count % 2 == 1):
            q.reverse()
            print('[' + ','.join(q) + ']')

        # 모든 함수에 등장한 R의 개수가 짝수라면, 그대로 유지
        else:
            print('[' + ','.join(q) + ']')
Comments