현제의 현재이야기
[백준/python] 5430 - AC 본문
from collections import deque
n = int(input())
results = []
for _ in range(n):
order = input()
arr_num = int(input())
num = input()[1:-1].split(",")
num = deque(num)
r = 0
rst = 0
for target in order:
if target == 'R':
if r == 0:
r = 1
else:
r = 0
elif target == 'D':
if arr_num == 0:
results.append('error')
rst = 1
break
if len(num) == 0:
results.append('error')
rst = 1
break
if r == 0:
num.popleft()
else:
num.pop()
if r == 0 and rst != 1:
results.append(num)
elif r == 1 and rst != 1:
num_result = []
while num:
num_pop = num.pop()
num_result.append(num_pop)
results.append(num_result)
for result in results:
if result != 'error':
print('[', end='')
print(*result, sep=",", end=']\n')
else:
print(result)
| 알고리즘
- 만약 입력으로 함수가 R이면 r을 0이나 1로 바꾸어준다. 여기서 r은 현재 배열의 상태로 0이면 뒤집히지 않은 상태이고 1이면 뒤집한 상태이다.
- 만약 함수가 D이면 r이 1이면 popleft, r이 2이면 pop을 해준다. 애초에 배열의 정수가 0개이거나 D함수로 인해서 배열의 정수 개수가 0개가 되면 'error' 을 results에 넣고 break한다. 이 예외들은 rst 를 1로 설정한다.
- for 문이 다 끝나면 r과 rst 상태를 확인한 후, r이 0 ,즉 뒤집히지 않았으면 그대로 results에 append하고, r이 1, 즉 뒤집힌 상태라면 pop을 하고 새로운 배열 num_result에 append하고 results에 넣어준다.
| 알게된 점
- 너무 입력과 출력이 더러웠다. 내가 어려운 부분은 다른 사람들도 다 어려워한다! input 함수에 슬라이싱이 되는지 처음알았다.
num = input()[1:-1].split(",")
- *를 사용한 언패킹 방법과 sep, end를 활용해서 [1, 2, 3, 4]를 [1,2,3,4]로 바꾸어주는 방법을 알게되었다.
print('[', end='')
print(*result, sep=",", end=']\n')
- 처음에 리스트를 문자열에서 정수로 바꿀 때, list(map(int, num))를 했더니 런타임 오류가 났었다. 한자리 수가 아니면 런타임 에러가 나나보다.
제한시간을 보고 뭔가 reverse나 for문을 한번 더 써서 R이 나올 때 전체를 뒤집으면 시간초가가 나겠구나해서 고민한 결과 배열의 상태를 바꾼다는 방법이 떠올라서 후다닥 풀다가 출력에서 애먹었던 문제.
'algorithm' 카테고리의 다른 글
[백준/python] 11047 - 동전0 (0) | 2022.10.04 |
---|---|
[백준/python] 2468 - 안전 영역 (1) | 2022.10.01 |
[백준/python] 2164 - 카드2 (0) | 2022.09.29 |
[백준/python] 2606 - 바이러스 (0) | 2022.09.28 |
[백준/python] 1331 - 나이트투어 (0) | 2022.09.27 |
Comments