본문 바로가기

백준5430 - AC (deque) Python 본문

개발/algorithm

백준5430 - AC (deque) Python

자전하는명왕성 2023. 12. 23. 10:15

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

해당 문제는 테스트케이스에 대해, 맨앞 요소를 제거하거나 전체를 뒤집는 명령, 전체 수의 갯수, 배열이 주어진다고 할 때, 해당 명령에 따른 결과를 산출하는 문제다.

 

문제 해결 방식

배열과 같은 자료구조에서 맨 앞이나 맨 뒷 요소를 제거하는 것에 적합한 deque 자료구조로 문제해결에 접근했다. 다만, 'R'의 경우 배열을 뒤집어야 하는데, 이를 직접 소스 코드 내에서 구현하는 것은 시간복잡도 측면에서 불리하기 때문에, 뒤집힌 횟수를 기록하여 뒤집힌 횟수가 홀수인 경우는 맨 뒷 요소를 제거하고 짝수인 경우는 맨 앞 요소를 제거하는 방식으로 로직을 구현했다.

 

import sys
data_temp = sys.stdin if sys.platform == 'linux' else open('입력.txt', 'r')
input_data = data_temp.read().splitlines()
from collections import deque


def solution (data) :
  data.pop(0)
  testCase = []
  for i in range(0,len(data),3) :
    testCase.append(data[i:i+3])
  
  result = list(map(lambda x : act(x), testCase))
  print('\n'.join(result))
  
def act(case) :
  command,n,str = case
  deq = deque(str[1:-1].split(',')) if n != '0' else deque()
  rev = 0

  for order in command :
    if order == 'R' : rev += 1
    else :
      if len(deq) == 0 : return 'error'
      else :
        if rev % 2 == 0 : deq.popleft()
        else : deq.pop()
  
  revDeq = deque(reversed(deq))
  return f'[{",".join(deq)}]' if rev % 2 == 0 else f'[{",".join(revDeq)}]'

solution(input_data)
Comments