[백준/파이썬] 5430번 AC 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 5430번 AC
- 문제풀이 코드 GitHub 링크
- 제출 언어: PyPy 3
풀이
문제
명령 문자열 p(R, D)와 정수 배열이 주어질 때, 명령을 순서대로 적용한 결과를 출력하는 문제입니다.
R: 배열 뒤집기D: 첫 원소 삭제(비어 있으면 에러)
배열을 매번 실제로 뒤집으면 시간 초과가 나기 쉬우므로,
현재 방향만 관리하고 마지막에 한 번에 슬라이싱해서 출력하는 방식이 핵심입니다.
- 자세한 문제 및 입출력 예제는 상단의 문제 출처(백준 홈페이지)를 참조해주세요
코드
import sys;read=sys.stdin.readline
for T in range(int(read())):
p,n=read(),int(read())
h,t,d=1,n,1
l=[-1]
if n>0:l+=list(map(int,input()[1:-1].split(',')))
else:input()
for c in p:
if c=='R':h,t,d=t,h,-d
elif c=='D':h+=d
print(('['+','.join(map(str,l[h:t+d:d]))+']')if h*d<=(t+d)*d else'error')
설명
포인트는 R을 실제 뒤집기가 아니라 head / tail / direction으로 처리하는 것입니다.
h, t, d를 이용해 현재 유효 구간과 진행 방향을 유지R이면h, t를 바꾸고d *= -1D면h += d로 앞 원소 제거 효과
마지막에 l[h:t+d:d] 슬라이싱으로 결과를 만들어 출력합니다.
중간에 유효 구간이 역전되면(h*d > (t+d)*d) error를 출력합니다.
댓글남기기