algorithm

๋ฐฑ์ค€ 28325

rkawk 2024. 6. 13. 23:20

๋ฌธ์ œ 

๋”๋ณด๊ธฐ

KOI ํ˜ธ์ˆซ๊ฐ€์— ์—ฌ๋Ÿฌ ๊ฐœ๋ฏธ๊ฐ€ ๋ชจ์—ฌ ์‚ฌ๋Š” ๊ฐœ๋ฏธ๊ตด์ด ์žˆ๋‹ค. ๊ฐœ๋ฏธ๊ตด์€ ๋‘ฅ๊ทผ ํ˜ธ์ˆ˜์˜ ๋‘˜๋ ˆ๋ฅผ ๋”ฐ๋ผ 1๋ถ€ํ„ฐ ๐‘๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์€ ๐‘๊ฐœ์˜ ๋ฐฉ์ด ์ฐจ๋ก€๋Œ€๋กœ ์›ํ˜•์œผ๋กœ ๋ฐฐ์น˜๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  ๐‘– (1≤๐‘–≤๐‘−1)์— ๋Œ€ํ•ด ๐‘–๋ฒˆ์งธ ๋ฐฉ๊ณผ ๐‘–+1๋ฒˆ์งธ ๋ฐฉ์ด, ๊ทธ๋ฆฌ๊ณ  ๐‘๋ฒˆ์งธ ๋ฐฉ๊ณผ 1๋ฒˆ์งธ ๋ฐฉ์ด ํ†ต๋กœ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ํ˜•ํƒœ์˜€๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ์ด์œ ๋กœ ์ธํ•ด ๊ฐ ๋ฐฉ์—์„œ ๋ช‡ ๊ฐœ์˜ ์ชฝ๋ฐฉ์ด ๊ฐˆ๋ผ์ง€๊ธฐ ์‹œ์ž‘ํ•ด์„œ, ํ˜„์žฌ๋Š” ๋ชจ๋“  ๐‘– (1≤๐‘–≤๐‘)์— ๋Œ€ํ•ด, ๊ฐœ๋ฏธ๊ตด์˜ ๐‘–๋ฒˆ์งธ ๋ฐฉ์— ๐ถ๐‘–๊ฐœ์˜ ์ชฝ๋ฐฉ์ด ํ†ต๋กœ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. ๐‘–๋ฒˆ์งธ ๋ฐฉ๊ณผ ์—ฐ๊ฒฐ๋œ ์ชฝ๋ฐฉ์€ ๐‘–๋ฒˆ์งธ ๋ฐฉ ์ด์™ธ์— ๋‹ค๋ฅธ ๋ฐฉ๊ณผ ํ†ต๋กœ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๐‘=7์ด๊ณ , ๐ถ=[3,0,0,1,0,2,0]์ธ ๊ฐœ๋ฏธ๊ตด์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์ด๋‹ค.

๊ฐœ๋ฏธ๊ตด์˜ ๊ฐ ๋ฐฉ๊ณผ ์ชฝ๋ฐฉ์—๋Š” ์ตœ๋Œ€ ํ•œ ๋งˆ๋ฆฌ์˜ ๊ฐœ๋ฏธ๊ฐ€ ์‚ด ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ํ†ต๋กœ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋‘ ๊ณณ(๋ฐฉ ๋˜๋Š” ์ชฝ๋ฐฉ) ๋ชจ๋‘์— ๊ฐœ๋ฏธ๊ฐ€ ์‚ด๊ณ  ์žˆ๋‹ค๋ฉด, ๋‘ ๊ฐœ๋ฏธ๋Š” ์„œ๋กœ ๋ถˆํŽธํ•ดํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถˆํŽธํ•จ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ํ˜„์žฌ ๊ฐœ๋ฏธ๊ตด์˜ ๊ฐ ํ†ต๋กœ๊ฐ€ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ๊ณณ ์ค‘ ์ตœ๋Œ€ ํ•œ ๊ณณ์—๋งŒ ๊ฐœ๋ฏธ๊ฐ€ ์‚ด๊ณ  ์žˆ๋‹ค.

๊ฐœ๋ฏธ๋“ค์€ ๋˜‘๋˜‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ•˜์— ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ˆ˜์˜ ๊ฐœ๋ฏธ๋“ค์ด ํ˜„์žฌ ๊ฐœ๋ฏธ๊ตด์— ์‚ด๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ํ˜„์žฌ ๊ฐœ๋ฏธ๊ตด์˜ ๊ตฌ์กฐ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐœ๋ฏธ๊ตด์— ์‚ด๊ณ  ์žˆ๋Š” ๊ฐœ๋ฏธ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.

ํ’€์ด

์กฐ๊ฑด๋ถ€๋กœ ํ’€๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๊ฐ€๊นŒ์šด ๊ฒƒ ๊ฐ™๋‹ค. 

์ชฝ๋ฐฉ์€ ๋ฌด์กฐ๊ฑด ํ•œ๊ฐœ ์ด์ƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํŠน์ •ํ•œ ๋ฐฉ์— ์ชฝ๋ฐฉ์ด ์žˆ์œผ๋ฉด, ๊ทธ ๋ฐฉ์—๋Š” ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐœ๋ฏธ๊ฐ€ ๋“ค์–ด๊ฐ€ ์‚ด ์ˆ˜ ์žˆ๊ณ , ๊ทธ ์˜†๋ฐฉ ๋‘๊ฐœ์—๋„ ๊ฐœ๋ฏธ๊ฐ€ ๋“ค์–ด๊ฐ€์„œ ์‚ด ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ชฝ๋ฐฉ์ด ์žˆ๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์ฒดํฌํ•ด์•ผํ•˜๊ณ , ์ชฝ๋ฐฉ๊ณผ ์ชฝ๋ฐฉ ์‚ฌ์ด์˜ ๋ฐฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฐœ๋ฏธ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋“ค์–ด์™€์„œ ์‚ด ์ˆ˜ ์žˆ๋Š”์ง€ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์›ํ˜•์ธ ์ ๋งŒ ์ฃผ์˜ํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค.

์ชฝ๋ฐฉ์— ๋“ค์–ด๊ฐ€๋Š”๊ฒŒ ๋ฌด์กฐ๊ฑด ์ข‹์€๊ฑฐ๊ฐ™๊ธดํ•œ๋ฐ, ์ฆ๋ช…์„ ๋ชปํ•˜๊ฒ ๋‹ค. ๊ท€๋ฅ˜๋ฒ•์œผ๋กœ ํ•˜๋ฉด ๋˜๋‚˜?

์ฝ”๋“œ

#include <iostream>
#include <vector>
#define ll long long
using namespace std;
ll N, arr[250001], ans;
vector<int>v, dist;
int main() {
    cin>>N;
    for(int i=0; i<N; i++) {
        cin>>arr[i];
        if(arr[i]) {
            ans += arr[i];
            v.push_back(i);
        }
    }
    if(v.empty()) {
        cout<<N/2;
        return 0;
    }
    else if(v.size() == 1) {
        dist.push_back(N - v.size());
    }else{
        for(int i=0; i<v.size(); i++) {
            if(i == v.size()-1)
                dist.push_back(v[0] + N-1-v[i]);
            else 
                dist.push_back(v[i+1]-v[i]-1);
        }
    }
    for(auto e : dist){
        ans += e/2 + e%2;
    }
    cout<<ans;


}