> >
본문 바로가기

Algorithm/BOJ

[BOJ] 31802번 주기 함수 (Easy)

#include <bits/stdc++.h>
#define FASTIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;

#define ll long long
const int MAXN = 100005;
ll arr[MAXN];

int main(){
    FASTIO;
    
    ll p, a, b, q, res = 0, sum = 0;
    cin >> p;
    for (int i = 0; i < p; i++) {
        cin >> arr[i];
        sum += arr[i];
    }
    cin >> a >> b;
    
    q = (b - a) / p;
    b -= q * p;
    res += q * sum;
    
    if (a < 0) {
        q = (-a + p - 1)/p;
        a += q*p;
        b += q*p;
    }
    
    for (int i = a; i <= b - 1; i++){
        res += arr[i % p];
    }
    
    cout << res;
    return 0;
}

 

1. [a, b]에서 주기만큼 먼저 계산해서 b를 갱신한다.

2. a를 0보다 크거나 같은 범위로 옮긴다. (i % p로 처리할 수 있음)

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 2504번 괄호의 값  (0) 2024.07.10
[BOJ] 18115번 카드 놓기  (0) 2024.07.10
[BOJ] 15276번 Palindrmoic Password  (0) 2024.07.10
[BOJ] 30445번 행복 점수  (0) 2024.07.10
[BOJ] 14503번 로봇 청소기  (0) 2024.07.09