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씩 더해주었다. 그 후 최종적으로 f
와 b
의 합이 기존 리스트의 길이보다 긴 경우 빈 리스트에 함수 D를 실행했다고 판단할 수 있기 때문에 error를 출력하도록 하였고 그 외에는 리스트 결과를 출력하였다.
결과
'개인 공부 공간 > Algorithm' 카테고리의 다른 글
BOJ(백준) 2606번 바이러스 파이썬 (0) | 2021.03.19 |
---|---|
BOJ(백준) 1260번 DFS와 BFS 파이썬 (0) | 2021.03.19 |
BOJ(백준) 1021번 회전하는 큐 파이썬 (0) | 2021.03.19 |
BOJ(백준) 1966번 프린터큐 파이썬 (0) | 2021.03.19 |
BOJ(백준) 1874번 스택 수열 파이썬 (0) | 2021.03.19 |