반응형

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

 

5430번: AC

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

www.acmicpc.net

 

해결 방법 : deque 자료구조 사용

  • R동작 : 현재 방향이 정방향인지 역방향인지를 나타내는 boolean 변수 cur로 판단
  • D동작 : 리스트 양쪽에서 O(1)로 삭제가 가능한 deque 자료구조를 사용
    • cur이 True이면 popleft()
    • cur이 False이면 pop() 
  • 하지만 사실상 문제가 원하는 대로 문자열 입력, 출력 하는데 신경쓸게 더 많다.
    • 출력시 리스트를 반환하면 오답. 리스트 모양으로 문자열을 반환해줘야 한다..  :(
    • 리스트를 반환하면 [a, b, c] 처럼 ',' 다음에 띄워 쓰기가 되는데 출력 형식은 [a,b,c].

 

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

def solution(p, arr):
    arr = deque(arr)
    cur = True # 정방향, False : 역방향

    for i in p: # 동작 실행
        if i == 'R': # 뒤집기 논리 동작
            cur = False if cur else True
        elif i == 'D': # 현 방향에 따라 리스트 요소 제거
            if len(arr) == 0: return 'error' # 리스트에 값이 없으면 'error'

            if cur:
                arr.popleft()
            else:
                arr.pop()

    arr = list(arr) if cur else list(arr)[::-1] # 마지막 방향이 역방향이면 리스트 뒤집기

    return '[' + ','.join(arr) + ']' # 출력 포맷

if __name__ == '__main__':
    p_list = []
    arr_list = []

    T = int(input())
    for i in range(T):
        p = input().strip()
        n = int(input().strip())
        arr = input().strip()[1:-1].split(',')
        arr = [] if arr == [''] else arr

        p_list.append(p)
        arr_list.append(arr)

    for p, arr in zip(p_list, arr_list):
        result = solution(p, arr)
        print(result)
반응형

+ Recent posts