๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 24499๋ฒˆ - blobyum

by ์•ˆ์ฃผํ˜• 2022. 3. 23.

๋ฌธ์ œ

 

24499๋ฒˆ: blobyum

4๋ฒˆ ์• ํ”ŒํŒŒ์ด์™€ 1๋ฒˆ ์• ํ”ŒํŒŒ์ด๋ฅผ ๋จน์œผ๋ฉด ์ด ๋ง›์˜ ํ•ฉ์ด 9์ด๊ณ , ์ด๊ฐ€ ์ตœ๋Œ“๊ฐ’์ด๋‹ค.

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <vector>

using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int N,K,ans = 0; cin>>N>>K;
    
    vector<int>arr, dp(2*N);
    
    
    for(int i=0; i<N; i++){
        int inp; cin>>inp;
        arr.push_back(inp);
    }
    
    for(int i=0; i<N; i++){
        arr.push_back(arr[i]);
    }
    
    dp[0] = arr[0];
    for(int i=1; i<K; i++){
        dp[i]=dp[i-1]+arr[i];
    }
    
    for(int i=K; i<2*N; i++){
        dp[i]=dp[i-1]-arr[i-K]+arr[i];
        ans = max(ans, dp[i]);
    }
    
    cout<<ans;
    
}

 

ํ’€์ด

์ด ๋ฌธ์ œ์—์„œ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์€ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  • ์›ํ˜• ๋ฐฐ์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • ์ž…๋ ฅ์ด 10๋งŒ๊นŒ์ง€ ๋“ค์–ด์˜ค๊ธฐ ๋•Œ๋ฌธ์— O(N)์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

๋ฉ์ฒญํ•˜๊ฒŒ๋„ ์ƒ๊ฐ ์—†์ด ํ’€๋‹ค๊ฐ€ ๋‘ ๋ฒˆ์งธ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ–ˆ๋‹ค๊ฐ€ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋–ด์Šต๋‹ˆ๋‹ค.

#include <iostream>
#include <vector>

#define ll unsigned long long int
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int N,K,ans=0; cin>>N>>K;
    vector<int>v;
    
    for(int i=0; i<N; i++){
        int inp; cin>>inp;
        v.push_back(inp);
    }
    
    for(int i=0; i<v.size(); i++){
        int temp = 0;
        for(int k=0; k<K; k++){
            int index = i+k;
            if(i+k>v.size()-1) index = (i+k)%N;
            temp+=v[index];
        }
        ans = max(temp,ans);
    }
    cout<<ans;
    
}

์›ํ˜• ๋ฐฐ์—ด ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ œ๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์—๋Š” ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  1. ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ mod์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  2. ๋ฐฐ์—ด์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋˜ ์ถ”๊ฐ€ํ•˜์—ฌ 2*Nํฌ๊ธฐ๋กœ ๋งŒ๋“ ๋‹ค.

์•„๋ž˜ ์ •๋‹ต ์ฝ”๋“œ์—์„œ๋Š” ์›ํ˜• ๋ฐฐ์—ด ๋ถ€๋ถ„์€ 2๋ฒˆ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  O(N)์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ ํ™”์‹์„ ๋– ์˜ฌ๋ ธ๋Š”๋ฐ ํ’€์ด๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ„ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด dp[i] = dp[i-1] - arr[i - k] + arr[i]; ์˜ ์‹์„ ๋„์ถœํ•ด ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€