문제 설명
선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다.
AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다.
함수 R은 배열에 있는 숫자의 순서를 뒤집는 함수이고, D는 첫 번째 숫자를 버리는 함수이다.
배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다.
함수는 조합해서 한 번에 사용할 수 있다.
예를 들어, "RDD"는 배열을 뒤집은 다음 처음 두 숫자를 버리는 함수이다.
배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과를 구하는 프로그램을 작성하시오.
풀이 과정
이 문제는 입력을 특이하게 괄호와 쉼표를 모두 포함하여 받는다
즉 "[1,2,3,4]" 이렇게 큰 따옴표 안에 있는 것을 모두 입력 받는다.
하지만 처리는 정수(1,2,3,4)만 해야 하므로 쉼표로 구분을 해줘야 하고, 대괄호는 지워줘야 하기 때문에
[1:-1]범위의 부분만 가져와서 deque를 만들어준다.
하지만 이 때, "[]"라고 입력을 받아도 deque의 길이는 1이 되기 때문에
길이가 0인 부분에 대해서는 예외사항으로 빈 큐로 초기화를 해줘야 한다.
풀이과정은 다음과 같다.
내가 처음 작성한 코드는 1번 코드와 같은데 이 코드는 시간초과 문제가 발생하였다.
Reverse를 해야 할 때마다, 매번 deque를 뒤집어 주었기 때문이다.
그래서 Reverse를 매번 실행하지 않고, 뒤집는 횟수를 기억해두었다가
뒤집는 횟수가 홀수 번 일때만 뒤집도록 수정하였다.
짝수번을 뒤집게 되면 안뒤집는 상황이랑 똑같기 때문이다.
최종적인 코드는 2번 코드와 같다.
1번 코드
import sys
from collections import deque
t = int(input())
for i in range(t):
p = sys.stdin.readline().rstrip()
n = int(input())
arr = deque(sys.stdin.readline().rstrip()[1:-1].split(","))
if n == 0:
arr = deque()
flag = 0
for j in p:
if j == 'R':
arr.reverse()
elif j == 'D':
if arr:
arr.popleft()
else:
print("error")
flag = 1
break
if flag == 0:
print("["+",".join(arr)+"]")
2번 코드
import sys
from collections import deque
t = int(input())
for i in range(t):
p = sys.stdin.readline().rstrip()
n = int(input())
arr = sys.stdin.readline().rstrip()[1:-1].split(",")
queue = deque(arr)
rev, front, back = 0, 0, len(queue)-1
flag = 0
if n == 0:
queue = []
front = 0
back = 0
for j in p:
if j == 'R':
rev += 1
elif j == 'D':
if len(queue) < 1:
flag = 1
print("error")
break
else:
if rev % 2 == 0:
queue.popleft()
else:
queue.pop()
if flag == 0:
if rev % 2 == 0:
print("[" + ",".join(queue) + "]")
else:
queue.reverse()
print("[" + ",".join(queue) + "]")
전체 문제 & 코드는 위의 깃에 정리되어 있습니다.
팔로우 & 맞팔은 환영입니다 !
'Algorithm > Stack & Queue' 카테고리의 다른 글
[프로그래머스] 줄 서는 방법 (Python 파이썬) (2) | 2021.04.23 |
---|---|
[프로그래머스] 괄호 변환 (2020 KaKao Blind ) Python 파이썬풀이 (0) | 2021.04.21 |
[백준] 1021번 회전하는 큐 (Python 파이썬) (0) | 2021.04.16 |
[백준] 1966번 프린터 큐 (Python 파이썬) (0) | 2021.04.16 |
[백준] 11866번 요세푸스 문제 0 (Python 파이썬) (0) | 2021.04.16 |