문제
https://www.acmicpc.net/problem/5430
코드
import sys
def result(p, lst):
l, r = 0, len(lst)
reverse = False
if r < p.count('D'):
return 'error'
for i in p:
if i == 'R':
reverse = not reverse
elif i == 'D':
if reverse: r -= 1
else: l += 1
if len(lst) == 0:
return '[]'
else:
lst = lst[l:r]
if reverse:
return '[' + ','.join(reversed(lst)) + ']'
else:
return '[' + ','.join(lst) + ']'
T = int(input())
for _ in range(T):
p = sys.stdin.readline().rstrip()
n = int(input())
lst = sys.stdin.readline().strip('[]\n').split(',')
if n == 0:
lst = []
x = result(p, lst)
print(x)
result 함수에서 l, r은 각각 리스트의 처음과 끝입니다.
reverse는 False 상태로 만약 명령어 R이 나오면 반대로 해주는데
이 때 R이 짝수번 나오면 원래 상태와 똑같기 때문에 False이고
R이 홀수번 나오면 뒤집어지기 때문에 True가 됩니다.
리스트의 전체 길이보다 D 명령어가 많으면 오류이기 때문에 error를 반환합니다.
그리고 명령어가 D일 때
뒤집어진 상태이면 오른쪽 하나를 빼주고, 뒤집어진 상태가 아니면 왼쪽 하나를 더해줍니다.
마지막 조건문에서 리스트가 비어있다면 빈 배열을 반환해주고
그렇지 않다면 lst를 lst[l:r]로 바꿔주고, 뒤집어진 상태인지를 확인한 뒤에 값을 반환합니다.
'IT > 알고리즘' 카테고리의 다른 글
알고리즘 - 재귀 알고리즘(2) (0) | 2020.11.18 |
---|---|
알고리즘 - 재귀 알고리즘(1) (0) | 2020.11.16 |
알고리즘 - 큐(queue) (0) | 2020.11.12 |
백준 - 4949번 (0) | 2020.11.09 |
백준 - 1406번 (0) | 2020.11.09 |
댓글