본문 바로가기
알고리즘

AC [백준 5430] - python

by 우보틀 2021. 12. 5.

 

이 문제는 구현이 어려웠던 문제는 아니고 그 안에 개념을 떠올리기가 쉽지 않았었던것 같다.(모든 알고리즘 문제가 그런건가...)

끝에 출력 이슈도 있었다.....

t = int(input())

def func(x) :
  if x != '' :
    return int(x)
  
for _ in range(t) :
  commands = list(input())
  n = input()
  array = list(filter(lambda x : x != None, list(map(func, input().replace('[', '').replace(']', '').split(',')))))
  flag = True
  reverse_count = 0
  for cmd in commands :
    if cmd == 'R' :
      reverse_count += 1
    elif cmd == 'D' :
      if len(array) == 0 :
        flag = False
        break
      else :
        if reverse_count % 2 == 1 :
          array.pop()
        else :
          array.pop(0)
  
  if flag :
    if reverse_count % 2 == 1 :
      array.reverse()
    # print(array)
    if len(array) != 0 :
      print("[" + ",".join(list(map(str, array))) + "]")
    else :
      print("[]")
  else :
    print('error')

 

처음 접근했었던 R이 등장할때마다 reverse를 하게 되면 무조건 시간 초과에 걸리게 된다.

매번 reverse를 하는 것이아니라 스택을 이용해보자

 

1. reverse_count %2 == 0 

뒤집지 않은 형태와 동일하게 되므로 맨처음에서 원소를 빼주면 된다

 

2. reverse_count % 2 == 1 

반대로 되어있는 상태이므로 끝에서 원소를 빼주면 된다

 

마지막에 뒤돌아서 출력해줄지 원래되로 출력해줄지만 판단하고 Print문을 문제에서 요구하는 것과 동일하게 하면 된다.(중간에 간격 들어가면 안되고 철저히 해야한다..)

 

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

 

5430번: AC

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

www.acmicpc.net