๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/BOJ

[C++/BOJ] 2343 : ๊ธฐํƒ€ ๋ ˆ์Šจ (์ด์ง„ํƒ์ƒ‰) / ์ˆ˜์ •

by xxilliant 2023. 3. 28.
728x90
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/2343

๋ฌธ์ œ

๊ฐ•ํ† ๋Š” ์ž์‹ ์˜ ๊ธฐํƒ€ ๊ฐ•์˜ ๋™์˜์ƒ์„ ๋ธ”๋ฃจ๋ ˆ์ด๋กœ ๋งŒ๋“ค์–ด ํŒ๋งคํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋ธ”๋ฃจ๋ ˆ์ด์—๋Š” ์ด N๊ฐœ์˜ ๊ฐ•์˜๊ฐ€ ๋“ค์–ด๊ฐ€๋Š”๋ฐ, ๋ธ”๋ฃจ๋ ˆ์ด๋ฅผ ๋…นํ™”ํ•  ๋•Œ, ๊ฐ•์˜์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์•ˆ ๋œ๋‹ค. ์ˆœ์„œ๊ฐ€ ๋’ค๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ•์˜์˜ ํ๋ฆ„์ด ๋Š๊ฒจ, ํ•™์ƒ๋“ค์ด ๋Œ€ํ˜ผ๋ž€์— ๋น ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, i๋ฒˆ ๊ฐ•์˜์™€ j๋ฒˆ ๊ฐ•์˜๋ฅผ ๊ฐ™์€ ๋ธ”๋ฃจ๋ ˆ์ด์— ๋…นํ™”ํ•˜๋ ค๋ฉด i์™€ j ์‚ฌ์ด์˜ ๋ชจ๋“  ๊ฐ•์˜๋„ ๊ฐ™์€ ๋ธ”๋ฃจ๋ ˆ์ด์— ๋…นํ™”ํ•ด์•ผ ํ•œ๋‹ค.

๊ฐ•ํ† ๋Š” ์ด ๋ธ”๋ฃจ๋ ˆ์ด๊ฐ€ ์–ผ๋งˆ๋‚˜ ํŒ”๋ฆด์ง€ ์•„์ง ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋ธ”๋ฃจ๋ ˆ์ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ€๊ธ‰์  ์ค„์ด๋ ค๊ณ  ํ•œ๋‹ค. ์˜ค๋žœ ๊ณ ๋ฏผ ๋์— ๊ฐ•ํ† ๋Š” M๊ฐœ์˜ ๋ธ”๋ฃจ๋ ˆ์ด์— ๋ชจ๋“  ๊ธฐํƒ€ ๊ฐ•์˜ ๋™์˜์ƒ์„ ๋…นํ™”ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ด๋•Œ, ๋ธ”๋ฃจ๋ ˆ์ด์˜ ํฌ๊ธฐ(๋…นํ™” ๊ฐ€๋Šฅํ•œ ๊ธธ์ด)๋ฅผ ์ตœ์†Œ๋กœ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋‹จ, M๊ฐœ์˜ ๋ธ”๋ฃจ๋ ˆ์ด๋Š” ๋ชจ๋‘ ๊ฐ™์€ ํฌ๊ธฐ์ด์–ด์•ผ ํ•œ๋‹ค.

๊ฐ•ํ† ์˜ ๊ฐ ๊ฐ•์˜์˜ ๊ธธ์ด๊ฐ€ ๋ถ„ ๋‹จ์œ„(์ž์—ฐ์ˆ˜)๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ๊ฐ€๋Šฅํ•œ ๋ธ”๋ฃจ๋ ˆ์ด์˜ ํฌ๊ธฐ ์ค‘ ์ตœ์†Œ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฐ•์˜์˜ ์ˆ˜ N (1 โ‰ค N โ‰ค 100,000)๊ณผ M (1 โ‰ค M โ‰ค N)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” ๊ฐ•ํ† ์˜ ๊ธฐํƒ€ ๊ฐ•์˜์˜ ๊ธธ์ด๊ฐ€ ๊ฐ•์˜ ์ˆœ์„œ๋Œ€๋กœ ๋ถ„ ๋‹จ์œ„๋กœ(์ž์—ฐ์ˆ˜)๋กœ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ๊ฐ•์˜์˜ ๊ธธ์ด๋Š” 10,000๋ถ„์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฐ€๋Šฅํ•œ ๋ธ”๋ฃจ๋ ˆ์ด ํฌ๊ธฐ์ค‘ ์ตœ์†Œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


 

์‹ค๋ฒ„1.

์ด์ง„ํƒ์ƒ‰์€ ๋Š˜ ์–ด๋ ต๋‹ค

ํ•ญ์ƒ ๋ญ˜ ์ตœ์†Ÿ๊ฐ’, ์ค‘๊ฐ„๊ฐ’, ์ตœ๋Œ“๊ฐ’์œผ๋กœ ์žก์•„์•ผํ•˜๋Š”์ง€ ํ—ท๊ฐˆ๋ฆผ

 

 

+ 3/29 ์ดํ•ด์™„๋ฃŒ

์–ด์ ฏ๋ฐค์— ์ž๋ฉด์„œ ์ƒ๊ฐํ•ด๋ดค๋Š”๋ฐ ์ดํ•ดํ•ด๋ฒ„๋ ธ์Œ

 

 

1 2 3 4 5 6 7 ... 27 28

 

์œ„ ํ‘œ๋ฅผ ๋ด๋ฐ”

๋งŒ์•ฝ์— ํŒŒ์ผ์ด 7๊ฐœ์ด๊ณ  ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ 1๋ถ€ํ„ฐ 7๊นŒ์ง€ ์ž…๋ ฅ๋ฐ›๊ฒŒ ๋˜๋ฉด,

๋ธ”๋ฃจ๋ ˆ์ด ํ•˜๋‚˜์˜ ์ตœ์†Œ ์šฉ๋Ÿ‰์€ 7์ด์–ด์•ผํ•จ. ์™œ๋ƒ๋ฉด ํ•œ ํŒŒ์ผ์„ ์ชผ๊ฐœ์„œ ๋‹ด์„ ์ˆ˜ ์—†๊ฑฐ๋“ 

๊ทธ๋ฆฌ๊ณ  ๋ธ”๋ฃจ๋ ˆ์ด ํ•˜๋‚˜์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰์€ 28์ด๊ฒ ์ง€. ์™œ๋ƒ๋ฉด 7๊ฐœ ํŒŒ์ผ์„ ๋‹ค ํ•ฉ์ณ์„œ ํ•œ๋ฒˆ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ๊ฐ’์ด๋‹ˆ๊นŒ.

(1+2+3+4+5+6+7 = 28)

 

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•ด์•ผ ํ•  ๊ฐ’๋„ ๋ธ”๋ฃจ๋ ˆ์ด์˜ ์šฉ๋Ÿ‰์ž„. ๊ทธ๋‹ˆ๊นŒ ์ •๋ฆฌํ•˜์ž๋ฉด

 

1. (์ด์ง„ํƒ์ƒ‰)์ตœ์†Ÿ๊ฐ’, ์ค‘๊ฐ„๊ฐ’, ์ตœ๋Œ“๊ฐ’์œผ๋กœ ๋ธ”๋ฃจ๋ ˆ์ด ์šฉ๋Ÿ‰์„ ์ฐพ๋Š” ๊ฑฐ๋‹ค! ๋ผ๋Š”๊ฑธ ์•Œ ์ˆ˜ ์žˆ๊ณ 

2. ์ž…๋ ฅ๋ฐ›์€ ์ˆœ์„œ๋ฅผ ์ง€์ผœ์•ผํ•˜๋‹ˆ๊นŒ sort๋Š” ํ•˜๋ฉด ์•ˆ๋˜๊ตฌ

3. ๋ธ”๋ฃจ๋ ˆ์ด ์šฉ๋Ÿ‰(mid) * ๋ธ”๋ฃจ๋ ˆ์ด ๊ฐœ์ˆ˜(cnt) >= ์ด ํŒŒ์ผ๋“ค์˜ ์šฉ๋Ÿ‰ ํ•ฉ

4. ์œ„ ์‹์„ ์ด์šฉํ•ด์„œ cnt์™€ m(์ž…๋ ฅ๋ฐ›์€ ๋ธ”๋ฃจ๋ ˆ์ด ๊ฐœ์ˆ˜)์„ ๋น„๊ตํ•˜๋ฉด ๋จ.

5. ๊ทธ๋ฆฌ๊ณ  m==cnt์—์„œ ๋ฐ˜๋ณต๋ฌธ์„ ๋ฉˆ์ถ”๋ฉด ์•ˆ๋จ : ์™œ๋ƒ๋ฉด ์šฐ๋ฆฌ๋Š” ๋ธ”๋ฃจ๋ ˆ์ด ํ•˜๋‚˜๋‹น "์ตœ์†Œ" ๊ธธ์ด๋ฅผ ๊ตฌํ• ๊ฑฐ๋ผ์„œ! ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•ด์•ผํ•œ๋‹ค

 

 

 

๋‚˜์˜ ํ’€์ด

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    int m;
    int blue[100001]={0};
    int minlen = 0;
    int maxlen = 0;
    int mid = 0;
    int result;
    cin >> n >> m;
    for (int i = 0; i < n; ++i){
        cin >> blue[i];
        maxlen += blue[i]; // ์ตœ๋Œ€ ๊ธธ์ด๋Š” ๋ชจ๋“  ๋ฐฐ์—ด์˜ ํ•ฉ
        if(minlen < blue[i]) minlen = blue[i]; // ์ตœ์†Œ ๊ธธ์ด๋Š” ๊ฐ’๋“ค์˜ ์ตœ๋Œ“๊ฐ’
    }

    while(minlen <= maxlen){
        mid = (minlen + maxlen) / 2;
        int sum = 0;
        int cnt = 0;

        for (int i = 0; i < n; ++i){
            if(sum + blue[i] > mid){ // mid๋Š” ๋ธ”๋ฃจ๋ ˆ์ด ํ•˜๋‚˜์˜ ์šฉ๋Ÿ‰
                sum = 0;
                cnt++;
            }
            sum += blue[i];
        }
        cnt++;
       
        if(cnt > m) {
            minlen = mid + 1;
        }
        else if(cnt <= m) {
            maxlen = mid-1;
            result = mid;
        }
        // cout << minlen <<" "<<mid<<" "<<maxlen<<"\n";
    }

    cout << result;
}

 

์œผ์•„ ์ด๋ถ„ํƒ์ƒ‰ ํ•œ๋ฌธ์ œ๋งŒ ๋” ํ’€๊ณ  ๋„ค์ด๋ฒ„ ์ž์†Œ์„œ ์“ฐ๋Ÿฌ ๊ฐ€์•ผ์ง€..

 

728x90
๋ฐ˜์‘ํ˜•