https://www.acmicpc.net/problem/2346
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 최대 100이다.
각 테스트 케이스의 첫째 줄에는 수행할 함수 p가 주어진다. p의 길이는 1보다 크거나 같고, 100,000보다 작거나 같다.
다음 줄에는 배열에 들어있는 수의 개수 n이 주어진다. (0 ≤ n ≤ 100,000)
다음 줄에는 [x1,...,xn]과 같은 형태로 배열에 들어있는 정수가 주어진다. (1 ≤ xi ≤ 100)
전체 테스트 케이스에 주어지는 p의 길이의 합과 n의 합은 70만을 넘지 않는다.
출력
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
문제 코드
from collections import deque
for _ in range(int(input())):
p = list(input())
n = int(input())
arr = eval(input())
q = deque(arr)
rev = 0
flag = True
if n == 0:
queue = []
front = 0
back = 0
for j in p:
if j == "R":
rev += 1
elif j == "D":
if len(q) < 1:
flag = False
print("error")
break
else:
if rev % 2 == 0:
q.popleft()
else:
q.pop()
if flag:
if rev % 2 == 0:
print("[" + ",".join(map(str, q)) + "]")
else:
q.reverse()
print("[" + ",".join(map(str, q)) + "]")
문제 해석
1. 문자열로 입력받은 배열을 eval()을 이용하여 리스트로 변환
2-1. 이후 명령어(R, D)에 따라 다른 연산 수행
2-2. 뒤집힌 횟수가 짝수라면 왼쪽에서 pop, 홀수라면(뒤집혀있어야 하는 상황) 오른쪽에서 pop
2-3. 만약 리스트가 비어있어서 pop이 불가능하다면 flag를 False로 잡고 error 출력 후 탈출
3. 뒤집힌 횟수를 계산하여 최종적으로 홀수일 경우만 뒤집은 후 출력 -> 그렇지 않고 매번 뒤집으면 시간초과가 발생
'Koala - 17기 > 코딩테스트 심화 스터디' 카테고리의 다른 글
[백준/Python] 2467번 용액 (0) | 2025.03.02 |
---|---|
[백준/Python] 17204 죽음의 게임 (0) | 2025.03.02 |
[BOJ/Python3] 13334번 : 철로 (0) | 2025.02.25 |
[백준/Python] 13549번: 숨바꼭질3 (0) | 2025.02.23 |
[백준/Python]1753번 최단경로 (0) | 2025.02.23 |