Koala - 17기/코딩테스트 심화 스터디

[백준/Python] 5430번 : AC

rlawjdgns02 2025. 3. 1. 14:28

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

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 최대 100이다.

각 테스트 케이스의 첫째 줄에는 수행할 함수 p가 주어진다. p의 길이는 1보다 크거나 같고, 100,000보다 작거나 같다.

다음 줄에는 배열에 들어있는 수의 개수 n이 주어진다. (0 ≤ n ≤ 100,000)

다음 줄에는 [x1,...,xn]과 같은 형태로 배열에 들어있는 정수가 주어진다. (1 ≤ xi ≤ 100)

전체 테스트 케이스에 주어지는 p의 길이의 합과 n의 합은 70만을 넘지 않는다.

출력

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

 

문제 코드

from collections import deque
for _ in range(int(input())):
    p = list(input())
    n = int(input())
    arr = eval(input())
    
    q = deque(arr)
    
    rev = 0
    flag = True
    
    if n == 0:
        queue = []
        front = 0
        back = 0
        
    for j in p:
        if j == "R":
            rev += 1
        elif j == "D":
            if len(q) < 1:
                flag = False
                print("error")
                break
            else:
                if rev % 2 == 0:
                    q.popleft()
                else:
                    q.pop()
    
    if flag:
        if rev % 2 == 0:
            print("[" + ",".join(map(str, q)) + "]")
        else:
            q.reverse()
            print("[" + ",".join(map(str, q)) + "]")

문제 해석

1. 문자열로 입력받은 배열을 eval()을 이용하여 리스트로 변환

2-1. 이후 명령어(R, D)에 따라 다른 연산 수행

2-2. 뒤집힌 횟수가 짝수라면 왼쪽에서 pop, 홀수라면(뒤집혀있어야 하는 상황) 오른쪽에서 pop

2-3. 만약 리스트가 비어있어서 pop이 불가능하다면 flag를 False로 잡고 error 출력 후 탈출

3. 뒤집힌 횟수를 계산하여 최종적으로 홀수일 경우만 뒤집은 후 출력 -> 그렇지 않고 매번 뒤집으면 시간초과가 발생