https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
Problem
- 선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다.
- 함수 R은 배열에 있는 수의 순서를 뒤집는 함수이고, D는 첫 번째 수를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다.
- 배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과를 구하는 프로그램을 작성하시오.
조건
- 첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 최대 100이다.
- 각 테스트 케이스의 첫째 줄에는 수행할 함수 p가 주어진다. p의 길이는 1보다 크거나 같고, 100,000보다 작거나 같다.
- 다음 줄에는 배열에 들어있는 수의 개수 n이 주어진다. (0 ≤ n ≤ 100,000)
- 다음 줄에는 [x1,...,xn]과 같은 형태로 배열에 들어있는 정수가 주어진다. (1 ≤ xi ≤ 100)
- 전체 테스트 케이스에 주어지는 p의 길이의 합과 n의 합은 70만을 넘지 않는다.
SOL
특정 자료구조를 구현하는 알고리즘의 단골 문제 유형 중 하나이다.
이 문제에서는 2가지를 얻어갈 수 있을거 같다.
입력을 받을 때, 특정 인덱스를 슬라이싱해서 걸러서 받을 수 있다.
import sys
input = sys.stdin.readline
arr=list(input().rstrip()[1:-1].split(","))
print(arr)
위 문제에서 처럼 [1,2,3,4] 자체를 입력을 받을 때, [ , ] 를 제외하고 입력을 받을 수 있게 된다.
뒤집고 , 또 뒤집으면 안뒤집는 것과 같다.
이건, 생각해보면 진짜 당연한 말인데, 막상 코드로 구현하다보면, 어느새 뒤집으라고 하면 곧이곧대로 뒤집는 내 자신을 볼 수 있다.
뒤집는 횟수를 반으로 줄일 수 있기 때문에, 뒤집는 횟수를 cnt해주고, 짝수번 이면, 그대로 처리하고, 홀수번이면 뒤집어서 처리하자. 그리고, 뒤집어서 맨 앞에꺼를 버리는건, 맨 뒤를 버리는 것과 같다.
전체코드
# AC는 정수배열에 연산을 하기 위해 만든 언어.
# R,D가 있다.
# R : 배열에 있는 수의 순서를 뒤집는 함수.
# D : 첫번째 수를 버리는 함수
from pickle import FALSE
import sys
from collections import deque
input =sys.stdin.readline
tc= int(input().rstrip())
while tc:
cmds=input().rstrip()
N=int(input().rstrip())
# [1:-1] , 반복 리터럴 추가가능.
seq = deque(input().rstrip()[1:-1].split(","))
rev=0
flag=False
if N==0:
seq=deque()
for cmd in cmds:
if cmd =="R":
rev+=1
continue
if cmd =="D":
if not seq:
flag=True
print("error")
break
else:
seq.popleft() if rev%2==0 else seq.pop()
#print(flag)
if not flag:
#뒤집는 횟수가 짝수인 경우, 그대로임.
if rev%2==0:
print("["+','.join(seq)+"]")
else:
seq.reverse()
print("["+','.join(seq)+"]")
tc-=1
'알고리즘 문제(SOL)' 카테고리의 다른 글
[백준/1188/파이썬] 음식 평론가 (0) | 2022.03.11 |
---|---|
[백준/2294/파이썬] 동전 2 (0) | 2022.03.11 |
[백준/1759/파이썬] 암호 만들기 (0) | 2022.03.10 |
[백준/1946/파이썬] 신입사원 (0) | 2022.03.10 |
[백준/6588/파이썬] 골드바흐의 추측 (0) | 2022.03.10 |