BOJ(백준) 5430번 AC 파이썬

2021. 3. 19. 14:59개인 공부 공간/Algorithm

 

5430번: AC

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

www.acmicpc.net


코드

import sys
r = sys.stdin.readline
T = int(r())
for _ in range(T):
    p = r().rstrip().replace('RR','')
    n = int(r())
    l = list(r().rstrip()[1:-1].split(','))
    rev = 0
    f = 0
    b = 0
    for i in p:
        if i == 'R':
            rev += 1
        else:
            if rev%2 == 0:
                f += 1
            else:
                b += 1

    if f + b <= n:
        l = l[f:len(l)-b]
        if rev%2==0:
            print('['+','.join(l)+']')
        else:
            print('['+','.join(l[::-1])+']')
    else:
        print('error')

 

 

해설

p를 인풋할때 R이 짝수번 반복되어 있으면 아무 동작도 안한 것과 동일한 결과 이기 때문에 replace('RR','') 를 이용하였다. 함수 R을 사용할때마다 리스트의 순서를 뒤집고 D를 사용할때마다 pop(0) 을 하면 시간복잡도 문제가 발생할 것이라고 판단해 이를 해결하기 위해 고민하였다. rev 를 이용해 리스트의 순서가 몇번 뒤집혔는지 저장하고 함수 D를 만났을때 rev 가 짝수번인 경우 f 에 1씩 더해주고 홀수번인 경우 b 에 1씩 더해주었다. 그 후 최종적으로 fb 의 합이 기존 리스트의 길이보다 긴 경우 빈 리스트에 함수 D를 실행했다고 판단할 수 있기 때문에 error를 출력하도록 하였고 그 외에는 리스트 결과를 출력하였다.

 

결과

AC결과.PNG

출처: https://privatedevelopnote.tistory.com/81 [개인노트]