728x90
http://WWW.acmicpc.net/problem/5430
# 조건
- AC 언어는 정수 배열에 연산을 하기 위해 만든 언어
- R(뒤집기)와 D(버리기) 함수가 존재
- R은 배열에 있는 수의 순서를 뒤집는 함수이고, D는 첫 번째 수를 버리는 함수
- 비어있는데 D를 사용하면 에러
- 첫줄 tc 개수 T
- 각 테케의 첫 줄에는 수행할 함수 p (1<=p<=100,000)
- 배열에 들어있는 수의 개수 n과 배열에 들어 있는 정수가 주어진다.
- 함수를 수행한 결과를 출력하고, 에러가 발생할 경우 erro 출력
# 접근 방법
- 정수 배열을 받아준 후 명령어 대로 수행하면 될 것 같다.
- 다만, 리스트의 형태로 들어오기 때문에
- -> reverse를 이용하여 대괄호 제거
- rstrip을 통해 개행문자 제거
- split(',') 이용 ,를 제거 해주면 된다.
- R인 경우 [::-1], D인 경우 pop을 해주는데 시간 효율을 고려하여 deque를 이용 -> popleft와 reverse 사용
- 또한 비어있는 경우가 있으므로 try, except을 이용해준다.
# 시간 초과
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
from collections import deque
T = int(input())
for tc in range(T):
oper = input().rstrip()
N = int(input())
# 대괄호 제거 후 ',' 기준 나눠주기
q = deque(input().replace('[',"").replace(']',"").rstrip().split(','))
# ''처럼 공백하나 있는 경우
if 'D' in oper and N == 0:
print('error')
else:
for i in oper:
if i == 'R':
q.reverse()
else:
try:
q.popleft()
except:
print('error')
break
else:
print('[',end='')
for i in range(len(q)):
if i == len(q)-1:
print(q[i],end='')
else:
print(q[i], end=',')
print(']')
위의 방법으로 하면 시간초과가 발생한다. 따라서, reverse 메서드를 직접 구현해주자.
- reverse method의 경우 시간복잡도가 -> O(N)이므로 자주 사용하면 좋지 않다.
- R이 들어오는 카운트를 세어주며 현재 R이 홀수개라면 -> pop()
- 현재 R이 짝수개라면 popleft()를 이용해준다.
- 이후, R이 홀수개라면 뒤집어주고 아니면 그대로 출력
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
from collections import deque
T = int(input())
for tc in range(T):
oper = input().rstrip()
N = int(input())
# 대괄호 제거 후 ',' 기준 나눠주기
q = deque(input().replace('[',"").replace(']',"").rstrip().split(','))
# R 카운팅해주기
R_cnt = 0
# ''처럼 공백하나 있는 경우
if 'D' in oper and N == 0:
print('error')
else:
for i in oper:
if i == 'R':
R_cnt += 1
else:
try:
if R_cnt % 2:
q.pop()
else:
q.popleft()
except:
print('error')
break
else:
if R_cnt % 2:
q.reverse()
print('[',end='')
for i in range(len(q)):
if i == len(q)-1:
print(q[i],end='')
else:
print(q[i], end=',')
print(']')
728x90
'ALGORITHM > 자료구조' 카테고리의 다른 글
[백준 1043번] 파이썬 - 거짓말 (0) | 2022.11.30 |
---|---|
[백준 11286번] 파이썬 - 절댓값 힙 (0) | 2022.10.20 |
[백준 7662번] 파이썬 - 이중 우선순위 큐 (0) | 2022.10.09 |
[백준 1764번] 파이썬 - 듣보잡 (0) | 2022.10.05 |
[백준 1966] 파이썬 - 프린터 큐 (0) | 2022.09.16 |