첫 번째 테스트케이스로 예를 들면,
- 배열의 순서를 뒤집는다(R) →
[4,3,2,1]
- 첫 번째 수를 버린다(D) →
[3,2,1]
- 첫 번째 수를 버린다(D) →
[2,1]
로 연산이 진행되어 최종 결과는 [2,1]
이다.
주어진대로 그대로 연산하자.
But, R을 짝수번 연산하는 것은 원래 배열과 결과가 똑같다.
→ 짝수번 연속되어 들어오는 R은 지우자
ex 1)RRRRD
=D
ex 2)RRR
=R
RRRRDRRDRDRD
→ RRDRRDRDRD
→ DRRDRDRD
→ DDRDRD
import sys
from collections import deque
input = sys.stdin.readline
t = int(input())
for _ in range(t):
p = list(str(input().rstrip())) # 연산 ['R', 'D', 'D']
n = int(input()) # 배열 속 수의 개수
# string으로 들어온 입력을 list 형태로 변환
arr = input().rstrip()
arr = arr.replace('[', '')
arr = arr.replace(']', '')
arr = list(arr.split(','))
# R이 짝수 번 연속으로 나오는 것을 제거하여 연산 횟수를 줄임
new_p = []
i = 0
while i < len(p):
if i+1 < len(p) and p[i] == 'R' and p[i+1] == 'R':
i += 2
else:
new_p.append(p[i])
i += 1
deq = deque(arr) # D 연산에 덱을 활용
flag = False
for elem in new_p:
if elem == 'R': # R 연산
deq.reverse()
else: # D 연산
if not deq or arr == ['']:
flag = True
break
deq.popleft()
if not flag:
# 문자열 형태로 출력해주어야 함
print('[', end='')
for i in range(len(deq)):
if i == len(deq)-1:
print(deq[i], end=']')
else:
print(deq[i], end=',')
print()
else:
print('error')
처음에 최종 배열을 출력할 때 print(list(map(int, list(deq))))
로 하여 리스트를 그대로 출력했고, ValueError이 나왔다.
리스트를 그대로 출력하면 안되고, 문자열 형태로 출력해주어야 한다.
remove()
의 시간 복잡도는 O(N)
➡️ R의 개수를 세고 → 홀짝 여부에 따라 popleft(), pop() 중 하나를 한다.
배열 뒤집기는 마지막에 1번만 한다.
import sys
from collections import deque
input = sys.stdin.readline
t = int(input())
for _ in range(t):
p = list(str(input().rstrip()))
n = int(input())
# arr를 변환하는 방식을 변경
arr = input().rstrip()[1:-1].split(',')
deq = deque(arr)
flag = False
rev = 0
for elem in p:
if elem == 'R':
rev += 1 # R의 개수를 count
elif elem == 'D':
if len(deq) < 1: # 배열이 비어있는데 D 연산을 진행
flag = True
print('error')
break
else:
# R의 개수에 따라 D 연산 진행
if rev % 2 == 0:
deq.popleft()
else:
deq.pop()
if not flag:
# 처음부터 빈 리스트에 D 연산
if arr == ['']:
print('error')
elif rev % 2 == 0:
print('[' + ','.join(deq) + ']')
else:
deq.reverse()
print('[' + ','.join(deq) + ']')
D, 0, []
- errorR, 0, []
- []빈 리스트에 R 연산을 하는 것은 가능하다.
하지만 위와 코드와 같은에 if arr == []
을 넣으면 R, 0, []
일 때도 error라고 출력된다.
그래서 해당 조건문의 위치를 변경해주었다.
import sys
from collections import deque
input = sys.stdin.readline
t = int(input())
for _ in range(t):
p = list(str(input().rstrip())) # ['R', 'D', 'D']
n = int(input()) # 4
arr = input().rstrip()[1:-1].split(',')
deq = deque(arr)
flag = False
rev = 0
for elem in p:
if elem == 'R':
rev += 1
elif elem == 'D':
if len(deq) < 1 or arr == ['']:
flag = True
print('error')
break
else:
if rev % 2 == 0:
deq.popleft()
else:
deq.pop()
if not flag:
if rev % 2 == 0:
print('[' + ','.join(deq) + ']')
else:
deq.reverse()
print('[' + ','.join(deq) + ']')