코딩 테스트/Baekjoon

G5 5430. AC

  • -
728x90
반응형

문제 보기 :  5430번: AC


문제

  • 정답률 : 20%


작성 코드

T = int(input())

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

for _ in range(T):
    p = deque(input().rstrip()) # 함수 연산 문자열
    n = int(input().strip()) # 배열의 크기

    ls = deque(map(int,filter(None,re.split('[\[\],]',input().rstrip()))))

    reverse_flag = False # 뒤집기 상태를 관리
    error_flag = False # 에러 여부를 관리

    for function in p:
        if function == 'R':
            # ls = ls[::-1]
            reverse_flag = not reverse_flag # 뒤집기 상태 변경
        else:
            if ls:
                if reverse_flag:
                    ls.pop() # 뒤집힌 상태에서는 pop()으로 제거
                else:
                    ls.popleft() # 정방향에서는 popleft()로 제거
            else:
                error_flag = True # 빈 배열에서 삭제 시 에러
                break
    
    if error_flag:
        print('error')
    else:
        if reverse_flag:
            ls.reverse()
        print('['+','.join(map(str,list(ls)))+']')

풀이

이 코드는 여러 테스트 케이스에 대해 특정 연산을 배열에 수행하는 프로그램이다.

먼저 테스트 케이스 수를 입력받고, 각 테스트 케이스마다 함수 연산 문자열 p, 배열의 크기 n, 그리고 배열을 입력받는다. 배열은 deque를 사용해 효율적으로 처리한다.

연산 문자열에서 'R'은 배열을 뒤집는 동작인데, 실제로 배열을 뒤집는 대신 reverse_flag를 활용하여 뒤집힌 상태를 추적한다.

'D'는 배열의 원소를 제거하는 동작으로, 정방향일 때는 popleft()로, 뒤집힌 상태에서는 pop()으로 처리한다.

배열이 비어 있는 상태에서 'D' 연산이 들어오면 에러로 간주하여 error를 출력한다.

연산이 끝난 후, 최종적으로 배열을 뒤집힌 상태라면 reverse()를 호출해 출력 형식에 맞게 배열을 출력한다.

이 코드는 배열을 직접 반복적으로 뒤집는 비효율을 제거하고 상태 관리를 통해 성능을 최적화했다.

320x100
728x90

'코딩 테스트 > Baekjoon' 카테고리의 다른 글

S1 1991. 트리 순회  (0) 2024.12.29
S2 9020. 골드바흐의 추측  (2) 2024.12.27
G5 1759. 암호 만들기  (0) 2024.12.23
S3 1904. 01타일  (1) 2024.12.21
S4 14425. 문자열 집합  (0) 2024.12.17
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.