[伯俊5430]交流

12856 ワード

https://www.acmicpc.net/problem/5430

🥚質問する



🥚入力/出力



🍳コード#コード#

import sys
from collections import deque
input = sys.stdin.readline

for _ in range(int(input())):
    cmd = input().strip()
    # cmd 내 D 함수의 총 개수
    d_count = cmd.count('D')

    # 배열에 들어 있는 수의 개수
    size = int(input())

    # 문자열을 리스트 형식으로 바꾸고 있음
    data = input().strip()[1:-1].split(',')

    # 리스트 안의 요소들을 int 형식으로 바꿔줌
    # 만약 리스트가 비었거나 [''] -> 숫자로 변환할 수 없으므로 이 케이스 제외
    if len(data) > 0 and data[0] != '':
        for i in range(len(data)):
            data[i] = int(data[i])

    # data 리스트를 deque화
    q = deque(data)

    # D 함수의 총 개수가 수의 개수를 초과하면 에러
    if d_count > size:
        print("error")
        continue

    # 만약 명령어가 RDDR...이라면
    # [[R, 1], [D, 2], [R, 1] ...] 형식으로 저장하는 cmd_list
    cmd_list = []
    prev_code = None # 직전의 코드를 저장
    for code in cmd:
        if len(cmd_list) == 0:
            cmd_list.append([code, 1])
            prev_code = code #cmd_list에 삽입한 code를 prev_code로 저장
        else:
            if code == prev_code:
                cmd_list[-1][1] += 1
            else:
                cmd_list.append([code, 1])
                prev_code = code


    # cmd_list를 순회하면서 고고
    # reverse를 나타내는 flag
    REVERSE = False
    for code in cmd_list:
        if code[0] == "R":
            # R이 홀수번 등장하면 reverse의 현재 상태의 역을 취함!
            if code[1] % 2 == 1:
                REVERSE = not REVERSE

        elif code[0] == "D":
            # REVERSE가 True이면 pop
            if REVERSE:
                # D의 개수만큼 반복
                for i in range(code[1]):
                    q.pop()
            # REVERSE가 False이면 popleft
            else:
                # D의 개수만큼 반복
                for i in range(code[1]):
                    q.popleft()

    # 출력
    # 만약 출력 단계에서 REVERSE = True인 상태라면
    # 뒤에서부터 출력해야한다
    if REVERSE:
        print_list = list(q)
        print_list.reverse()
        # 이 문제의 함정! 리스트를 프린트 할 때 콤마 뒤에 띄어쓰기 없어
        print('[' + ','.join(map(str, print_list)) + ']')
    else:
        print_list = list(q)
        print('[' + ','.join(map(str, print_list)) + ']')

🧂アイデア


  • は、より簡単に解決する方法を重点的に考えています.「すべてのコマンドを1つずつ実行する必要はないでしょう?」
  • の初期に失敗し、反例を見つけて解くことができた.
  • 出力フォーマットが異なるためエラーが発生しました!😅 [1,2,3]は正しい出力フォーマットで、私は[1,2,3]で解いて、ほほほ