[백준] 5430 AC

avatar
2025.03.05
·
2 min read

3722

🔗 문제 링크

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

💻 코드

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

# R: 뒤집기, D: 첫 수 버리기 
# O(nlogn)까지

def solution(s,p):
    global point
    s = deque(s)
    end = len(s)-1
    cnt = 0

    for i in p:
        if i == 'R':
            if cnt % 2 == 0:
                cnt += 1 
            else:
                point = 0
                cnt -= 1
            
        elif i == 'D' and not s:
            print("error")
            return 
            
        else: # D
            if cnt % 2 == 0:
                s.popleft()
            else:
                s.pop()
        

    result = list(reversed(s)) if cnt % 2 != 0 else list(s)
    print("["+",".join(map(str,result))+"]")
    
T = int(input())
for _ in range(T):
    p = input().strip()
    n = int(input())
    li = eval(input())
    solution(li,p)

        
        

    

🤷‍♂ 풀이

  • n==0일지라도 D 명령어가 없었다면 []를 출력함에 유의해야한다.

  • reverse하고 pop을 매번하는 것은 시간초과가 날 수 있기에 cnt라는 변수로 뒤집기 여부를 체크

    • cnt % 2 == 1일때 뒤집힌 상태

  • deque를 활용해 O(1)연산으로 pop(), popleft() 수행하고 최악의 경우 모든 원소를 다 건들게 되기에 O(n)이다.

  • eval(input()) : input()으로 받은 문자열을 파이썬 리스트로 변환

  • print("["+",".join(map(str,result))+"]") : 이 문제는 출력에 공백이 없음에도 주의해야한다.

    • 결과 리스트의 요소들을 문자열로 변환해 ",".join으로 모두 이어붙인다.







- 컬렉션 아티클