[python] 백준 5430번 AC

Youngseo Lee·2024년 8월 16일

자료구조

목록 보기
6/7

백준 5430번 AC

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

문제

풀이

시간 초과 문제.
처음에 구현 -> 시간 초과 -> 리스트를 deque 로 변경 -> 시간 초과 -> reverse 를 너무 많이 해서 그럼

그리고 틀린 답

from collections import deque 

def RD():
    reversed_count = 0
    
    for i in rd_func:
        if len(data) == 0:
            print('error')
            return
        
        if i == 'R':
            reversed_count += 1

        if i == 'D':
            if reversed_count % 2 == 1:
                data.pop()
            else:
                data.popleft()

    if reversed_count % 2 == 1:
        data.reverse()    
    
    print(str(data).replace(' ', '').replace('deque(','').replace(')', ''))


t = int(input())
for i in range(t): 
    rd_func = list(map(str, input().strip()))
    n = int(input())
    data = input().replace('[','').replace(']','').replace(',', ' ')
    data = deque(map(int, data.split()))
    RD()

예외가 되는 경우의 수는 찾지 못했지만...
뒤집힌 상태에서 D 명령어가 실행되는 경우를 제대로 처리하지 못할 수 있다는데...
이해는 되지 않는다... 뭘까..?

그리고 정답...

from collections import deque 

def RD():
    reversed_count = 0

    for i in rd_func:
        if i == 'R':
            reversed_count += 1
        elif i == 'D':
            if len(data) == 0:
                print('error')
                return
            if reversed_count % 2 == 0:
                data.popleft()  # 정방향일 때 왼쪽에서 제거
            else:
                data.pop()  # 반대방향일 때 오른쪽에서 제거

    if reversed_count % 2 == 1:
        data.reverse()  # 최종적으로 뒤집혀야 할 경우에만 한번 뒤집기

    print(str(data).replace(' ', '').replace('deque(','').replace(')', ''))

t = int(input())
for i in range(t): 
    rd_func = list(map(str, input().strip()))
    n = int(input())
    data = input().replace('[','').replace(']','').replace(',', ' ')
    data = deque(map(int, data.split()))
    RD()

if len(data) == 0을 왜 if i == 'D'에 넣어야할까? 나는 아직도 모르겠다.

📌 주의

내가 놓친 세 개
1. pop 을 할 때 deque 가 더 효율적이다.
2. R을 짝수 번 했을 때는 reverse 안되게, 홀수 번 했을 때는 reverse 되게 바꾸자.
3. if len(data) == 0 을 D 아래에 위치시키자(?)

profile
leenthepotato

0개의 댓글