백준(BOJ)

[Python/파이썬] - 백준(BOJ) 17499번 : 수열과 시프트 쿼리

phanre 2022. 6. 6. 00:52

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=' ')