알고리즘(백준)/자료구조

[알고리즘/구현] 5430번 : AC - python

되다 2024. 10. 9. 22:18

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

 

 


  • 문제
  • 소요시간: 48분 52초


  • 설계하기(접근방법) 

1. 입력받기

리스트가 숫자로 주어지는 것이 아닌 문자열로 주어지기에 고민해야한다

 

 

먼저 split(,)으로 문자열을 나누어준 후,

왼쪽 끝과 오른쪽 끝의 괄호를 제거해준다

 

또한 배열의 원소 수가 많기 때문에 앞쪽의 원소를 제거하다 시간초과가 날 수 있다.

deque를 통해서 popleft를 사용할 수 있도록 해주자

 

2. 구현하기

 

입력받은 deque를 R일 때는 pop()을

정방향일 때는 popleft()를 수행할 수 있도록 짝수 홀수 카운터를 선언한다

 

중간에 배열이 비어버린 경우에 D를 수행한다면 error을 출력하고 다음 케이스로 넘어갈 수 있도록 구성하자

 

3. 출력하기

 

결과로 나온 리스트를 띄어쓰기 없이 출력해야하므로 join을 통해 출력해준다

 

 


  • 코드(출력)
from collections import deque

t = int(input())

for _ in range(t):
    cnt = 0 
    error_flag = False
    p = input()
    n = int(input())
    deq = deque(input().split(','))
    # 문자열 슬라이싱
    if n == 1:
        deq[0] = deq[0][1:-1]
    elif n == 0:
        deq = []
    else:
        deq[0] = deq[0][1:]
        deq[-1] = deq[-1][:-1]
    # 연산 수행
    for i in p :
        if i == 'R':
            cnt += 1
        else:
            if len(deq) == 0:
                print('error')
                error_flag = 1
                break
            else:
                if cnt % 2 == 0:
                    deq.popleft()
                    pass
                else:
                    deq.pop()
    #출력
    if error_flag == 1:
        continue
    if len(deq) == 0:
        print('[]')
    elif cnt % 2  == 0:
        print(f"[{','.join(deq)}]")
    else:
        deq.reverse()
        print(f"[{','.join(deq)}]")

  • 얻어갈 부분

1. deque를 reveser할 수 있다는 점을 잊어버렸었다. 다음에 잘 활용해주자

2. 출력할 때 join을 통해서 편리하게 출력할 수 있다.