해결 과정
조건이 많았던 풀이였다. 문제 자체를 이해하는 건 어렵지 않지만, 문자열 다루는 것과, 시간초과를 모두 고려해야하는 문제였다.
우선, 여러 번 뒤집는 것을 방지 하기 위한 count를 두고, deque()를 사용한다. popleft(), pop()을 모두 사용하기 위해서다. (물론 일반 arr에서도 pop(0), pop()을 사용할 수 있지만 시간복잡도가 더 된다.)
[1,2,3,4] 이런 것을 입력 받거나 출력 하는 것도 이 문제의 포인트였다.
입력시 arr = deque(tmp[1:-1].split(','))
출력시 "[" + ','.join(arr) + "]"
이 문제의 정답률이 왜 19%인지 알겠다 ㅋㅋ
나의 풀이
from collections import deque
def solution():
T = int(input())
for i in range(T):
p = input()
n = int(input())
tmp = input()
arr = deque()
if n != 0:
arr = deque(tmp[1:-1].split(','))
answer = True
count = 0
for f in p:
if f == "R":
count += 1
elif f == "D":
if not arr:
answer = False
break
elif count % 2 == 0:
arr.popleft()
elif count % 2 == 1:
arr.pop()
if not answer:
print("error")
else:
if count % 2 == 0:
print("["+",".join(arr)+"]")
else:
print("["+",".join(reversed(arr))+"]")
solution()
다른 풀이
이 분의 블로그 글도 참고했다.
IDEA
구현 문제를 만났을 때, 유연하게 생각하는 방법도 필요하다.
가령 이 문제처럼, 무작정 .reverse()를 진행하는게 아니라, 꼭 필요할 때만, 그리고 popleft() / pop() 하는 IDEA.
'Coding Test > 문제 풀이' 카테고리의 다른 글
[문제 풀이] 백준 1764 (0) | 2022.03.23 |
---|---|
[문제 풀이] 백준 14502 (0) | 2022.03.23 |
[문제 풀이] 백준 1339 (0) | 2022.03.22 |
[문제 풀이] 백준 2493 (0) | 2022.03.22 |
[문제 풀이] 백준 7576 (0) | 2022.03.22 |