728x90
반응형
https://www.acmicpc.net/problem/5430
Python
import sys
for _ in range(int(sys.stdin.readline().rstrip())):
cmd = sys.stdin.readline().rstrip()
n = int(sys.stdin.readline().rstrip())
arr = sys.stdin.readline().rstrip()[1:-1].split(',')
if arr[0] != '':
arr = list(map(int, arr))
elif "D" in cmd:
print("error")
continue
front = 0
end = len(arr)-1
isReverse = 1 # not reverse
isError = False
for c in cmd:
if c == "R":
end, front = front, end # front = len(arr)-front-1
isReverse *= -1
else:
if (end < front and isReverse == 1) or (end > front and isReverse == -1):
isError = True
#print(front, end)
break
front += isReverse # front-1 if isReverse==-1 else front+1
# print(c, isReverse, front, end)
if isError:
print("error")
else:
print("[", end="")
for i in range(front, end+isReverse, isReverse):
if i == end:
print(arr[i], end="")
else:
print(arr[i], end=",")
print("]")
짧은 풀이
- reverse 사실 표현하기
- 해당 변수에 -1를 매번 곱해준다. 1이면 -1이 되고, -1이면 1이 되므로 이전 값 확인할 필요 없이 반전된다.
- reverse에서 front와 end 교차하기
- 교차된다는 점에 주의하여, 삭제할 때 배열이 비어있는지 확인하기 위해 end와 front가 서로를 지나쳤는지 확인
- reverse된 배열 출력하기
- reverse가 -1이므로 이 값을 range()의 step으로 넣으면 감소하는 형식이 출력됨
- front = 5, end = 3이라면 5, 4, 3이 차례대로 출력되는 방식
- 이 때 end 값이 제대로 출력될 수 있도록 end-1을 해주어야 한다
- 이미 reverse 표현 변수에 -1이 들어 있으므로 end+reverse를 하면 end-1 식이 된다
728x90
반응형
'Algorithm Problems' 카테고리의 다른 글
[백준] [Python] 6198번 옥상 정원 꾸미기 - 스택 (0) | 2021.06.01 |
---|---|
[백준] [Python] 1158번 요세푸스 문제 - 큐 (0) | 2021.05.30 |
[백준] [Python] 11047번 동전0 - Greedy (0) | 2021.05.25 |
[백준] [Python] 17298번 오큰수 - 스택 (0) | 2021.05.25 |
[백준] [Python] 17952번 과제는 끝나지 않아! - 스택 (0) | 2021.05.23 |