• Feed
  • Explore
  • Ranking
/
/
    🧩알고리즘

    [백준] 5430 AC

    k
    kawaihachiwarae
    2025.03.05
    ·
    2 min read

    🔗 문제 링크

    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으로 모두 이어붙인다.







    - 컬렉션 아티클