https://www.acmicpc.net/problem/17499
17499번: 수열과 시프트 쿼리
첫 번째 줄에 Q개의 연산을 차례대로 수행한 후 a1, a2, …, aN 을 공백을 사이에 두고 출력합니다.
www.acmicpc.net
주어진 쿼리에 맞게 배열에 더하기를 하거나 시프트를 하는 문제이다.
단순 append, pop을 이용하면 시간초과가 나오므로 포인터를 활용해야 한다.
처음 p를 index 0으로 잡고 오른쪽으로 시프트하면 -, 왼쪽으로 시프트하면 + 하고
그 p값을 배열의 첫번째 인덱스라고 생각하고 더하고, 프린트하면 된다.
처음에 시간초과가 떠서 문제를 확인해보니 input에서 시간을 너무 잡아먹는 것 같아
sys 라이브러리의 sys.stdin.readline을 이용해서 input에 시간을 줄였더니 AC를 받았다.
import sys
input = sys.stdin.readline
n, q = map(int,input().split())
arr = list(map(int,input().split()))
p = 0
for i in range(q):
query = list(map(int,input().split()))
if query[0] == 1:
arr[(p+query[1]-1)%n] += query[2]
elif query[0] == 2:
p -= query[1]
else:
p += query[1]
for i in range(p, p+n):
print(arr[i%n], end=' ')
'백준(BOJ)' 카테고리의 다른 글
[Python/파이썬] - 백준(BOJ) 14500번 : 테트로미노 (0) | 2022.06.15 |
---|---|
[Python/파이썬] - 백준(BOJ) 1806번 : 부분합 (0) | 2022.06.06 |
[Python/파이썬] - 백준(BOJ) 2467번 : 용액 (0) | 2022.06.05 |
[Python/파이썬] - 백준(BOJ) 14442번 : 벽 부수고 이동하기 2 (0) | 2022.06.04 |
[Python/파이썬] - 백준(BOJ) 16235번 : 나무 재테크 (0) | 2022.06.03 |