본문 바로가기

~2023

[Python] 백준 5430번 문제, AC

728x90
반응형

<문제 링크>

 

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

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

 


<풀이>

 

선영이가 새로운 언어인 AC를 만들었는데 R과 D라는 메소드만 가지고 있다고 한다.

R은 배열에 있는 숫자를 뒤집는 메소드이며, D는 첫번째 숫자를 삭제하는 메소드이다.

 

데큐를 이용하면 쉽게 문제를 풀 수 있다.

D에 의해 삭제 되는 첫번째 숫자를 on_left를 통해 pop()을 할 지, popleft()를 할 지 결정한다.

그래서 현재 실행 메소드가 R이라면 on_left 상태를 변경해 D가 첫번째 숫자를 삭제할 수 있도록 한다.

그리고 error가 True라면 배열이 빈 상태에서 D 메소드가 호출된 것이기 때문에 "error"를 출력해준다.

 

삭제를 잘 수행했다면, 출력 형식에 맞게 잘 출력해주면 된다.

우선 on_left에 따라 dq를 그대로 출력해야 할 지, 아니면 거꾸로 출력해야 할 지를 판다한 다음에

Python의 f"" 기능과 join() 메소드를 통해 출력 형식에 맞게 출력한다.

 


<코드>

p[]: 수행할 함수들

n: 배열의 길이

arr[]: 수가 담긴 배열

on_left: 삭제 and 출력 방향 (R에 따라 OnOff)

error: 에러 판단 트리거 (빈 배열에서 D 수행 시 ON)

dq[]: 자료구조 덱


import sys
from collections import deque


if __name__ == '__main__':
    T = int(sys.stdin.readline().rstrip())

    for _ in range(T):
        '''
            p: 수행할 함수들
            n: 배열의 길이
            arr: 수가 담긴 배열
        '''
        p = list(sys.stdin.readline().rstrip())
        n = int(sys.stdin.readline().rstrip())
        arr = input()[1:-1].split(',')
        on_left = True  # 왼오 트리거 -> 처음은 왼쪽 기준임
        error = False # 에러 판단 트리거

        if arr[0] != '': # 빈 배열이 아니면
            dq = deque(list(map(int, arr)))
        else: # 빈 배열이면
            dq = deque([])

        for order in p: # 수행할 함수
            if order == "R": # R은 숫자의 순서를 뒤집음
                on_left = not on_left # 그래서 트리거 온오프
            else:
                if len(dq) == 0: # 함수가 D인데 배열의 크기가 0이라면
                    error = True # 에러 발생
                    break
                else:
                    if on_left: # 왼쪽 첫번째 숫자 삭제
                        dq.popleft()
                    else: # 오른쪽 첫번째 숫자 삭제
                        dq.pop()

        if error: # 에러면
            print("error")
        else: # error 상태가 아니면 리스트 프린트
            results = list(dq)
            if not on_left: # 왼쪽이 아니라 오른쪽이 기준이면
                results.reverse()

            print(f"[{','.join(list(map(str, results)))}]") # 출력 형식에 맞게 출력

 

 

 

 

 

 

 
728x90
반응형