๐Ÿ•๏ธ PS (BOJ)/Binary Search

[BOJ][C++] ๋ฐฑ์ค€ 3079๋ฒˆ: ์ž…๊ตญ์‹ฌ์‚ฌ (Gold V)

์„ ๋‹ฌ 2025. 4. 23. 16:39
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์€ ์˜ค์ŠคํŠธ๋ ˆ์ผ๋ฆฌ์•„๋กœ ์—ฌํ–‰์„ ๋– ๋‚ฌ๋‹ค. ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์€ ์ด M๋ช…์ด๊ณ , ์ง€๊ธˆ ๊ณตํ•ญ์—์„œ ํ•œ ์ค„๋กœ ์„œ์„œ ์ž…๊ตญ์‹ฌ์‚ฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค. ์ž…๊ตญ์‹ฌ์‚ฌ๋Œ€๋Š” ์ด N๊ฐœ๊ฐ€ ์žˆ๋‹ค. ๊ฐ ์ž…๊ตญ์‹ฌ์‚ฌ๊ด€์ด ์‹ฌ์‚ฌ๋ฅผ ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ์‚ฌ๋žŒ๋งˆ๋‹ค ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค. k๋ฒˆ ์‹ฌ์‚ฌ๋Œ€์— ์•‰์•„์žˆ๋Š” ์‹ฌ์‚ฌ๊ด€์ด ํ•œ ๋ช…์„ ์‹ฌ์‚ฌ๋ฅผ ํ•˜๋Š”๋ฐ ๋“œ๋Š” ์‹œ๊ฐ„์€ Tk์ด๋‹ค.
๊ฐ€์žฅ ์ฒ˜์Œ์— ๋ชจ๋“  ์‹ฌ์‚ฌ๋Œ€๋Š” ๋น„์–ด์žˆ๊ณ , ์‹ฌ์‚ฌ๋ฅผ ํ•  ์ค€๋น„๋ฅผ ๋ชจ๋‘ ๋๋ƒˆ๋‹ค. ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์€ ๋น„ํ–‰๊ธฐ ํ•˜๋‚˜๋ฅผ ์ „์„ธ๋‚ด๊ณ  ๋†€๋Ÿฌ๊ฐ”๊ธฐ ๋•Œ๋ฌธ์—, ์ง€๊ธˆ ์‹ฌ์‚ฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋ชจ๋‘ ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์ด๋‹ค. ํ•œ ์‹ฌ์‚ฌ๋Œ€์—์„œ๋Š” ํ•œ ๋ฒˆ์— ํ•œ ์‚ฌ๋žŒ๋งŒ ์‹ฌ์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€์žฅ ์•ž์— ์„œ ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋น„์–ด์žˆ๋Š” ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ๋ณด์ด๋ฉด ๊ฑฐ๊ธฐ๋กœ ๊ฐ€์„œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ญ์ƒ ์ด๋™์„ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋” ๋น ๋ฅธ ์‹ฌ์‚ฌ๋Œ€์˜ ์‹ฌ์‚ฌ๊ฐ€ ๋๋‚˜๊ธธ ๊ธฐ๋‹ค๋ฆฐ ๋‹ค์Œ์— ๊ทธ ๊ณณ์œผ๋กœ ๊ฐ€์„œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์•„๋„ ๋œ๋‹ค.
์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์€ ๋ชจ๋‘ ์ปดํ“จํ„ฐ ๊ณตํ•™๊ณผ ํ•™์ƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์–ด๋–ป๊ฒŒ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์œผ๋ฉด ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ตœ์†Œ๊ฐ€ ๋ ์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ๋‘ ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ์žˆ๊ณ , ์‹ฌ์‚ฌ๋ฅผ ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๊ฐ๊ฐ 7์ดˆ์™€ 10์ดˆ๋ผ๊ณ  ํ•˜์ž. ์ค„์— ์„œ ์žˆ๋Š” ์‚ฌ๋žŒ์ด 6๋ช…์ด๋ผ๋ฉด, ๊ฐ€์žฅ ์ฒซ ๋‘ ์‚ฌ๋žŒ์€ ์ฆ‰์‹œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์œผ๋Ÿฌ ๊ฐ€๊ฒŒ ๋œ๋‹ค. 7์ดˆ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ, ์ฒซ ๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€๋Š” ๋น„์–ด์žˆ๊ฒŒ ๋˜๊ณ , ์„ธ ๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ๊ทธ๊ณณ์œผ๋กœ ์ด๋™ํ•ด์„œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์œผ๋ฉด ๋œ๋‹ค. 10์ดˆ๊ฐ€ ๋˜๋Š” ์ˆœ๊ฐ„, ๋„ค ๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ์ด๊ณณ์œผ๋กœ ์ด๋™ํ•ด์„œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์œผ๋ฉด ๋˜๊ณ , 14์ดˆ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ๋Š” ๋‹ค์„ฏ ๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ์ฒซ ๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€๋กœ ์ด๋™ํ•ด์„œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์œผ๋ฉด ๋œ๋‹ค. 20์ดˆ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ, ๋‘ ๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ๋น„์–ด์žˆ๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ์—ฌ์„ฏ ๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ๊ทธ ๊ณณ์œผ๋กœ ์ด๋™ํ•˜์ง€ ์•Š๊ณ , 1์ดˆ๋ฅผ ๋” ๊ธฐ๋‹ค๋ฆฐ ๋‹ค์Œ์— ์ฒซ ๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€๋กœ ์ด๋™ํ•ด์„œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์œผ๋ฉด, ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด 28์ดˆ๊ฐ€ ๋œ๋‹ค. ๋งŒ์•ฝ, ๋งˆ์ง€๋ง‰ ์‚ฌ๋žŒ์ด 1์ดˆ๋ฅผ ๋” ๊ธฐ๋‹ค๋ฆฌ์ง€์•Š๊ณ , ์ฒซ ๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€๋กœ ์ด๋™ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด 30์ดˆ๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค.
์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 100,000, 1 ≤ M ≤ 1,000,000,000)
๋‹ค์Œ N๊ฐœ ์ค„์—๋Š” ๊ฐ ์‹ฌ์‚ฌ๋Œ€์—์„œ ์‹ฌ์‚ฌ๋ฅผ ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ธ Tk๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Tk≤ 109)

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์ด ์‹ฌ์‚ฌ๋ฅผ ๋งˆ์น˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

์‰ฌ์šด ์ด๋ถ„ํƒ์ƒ‰ ๋ฌธ์ œ์ธ๋ฐ,, ์ž…๋ ฅ๊ฐ’๋“ค์˜ ๋ฒ”์œ„๊ฐ€ ์—„์ฒญ๋‚˜๋‹ค

long long ์œผ๋กœ ํ•ด๋„ 34% ์—์„œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๊ฐ€ ๋œฌ๋‹ค

unsigned long long์„ ์จ์ฃผ์ž

#include <bits/stdc++.h>

using namespace std;

typedef unsigned long long ll;

int main() {
    ios_base :: sync_with_stdio(false); 
    cin.tie(NULL); cout.tie(NULL);

    // input
    ll n,m;
    cin >> n >> m;
    vector<ll>v(n);
    for(int i=0; i<n; i++) {
        cin >> v[i];
    }
    
    // solution
    ll start, end, mid, ans;
    start = 1;
    end = *max_element(v.begin(), v.end()) * m;
    ans = end;
    
    while(start<=end) {
        mid = (start + end) / 2;
        
        ll people = 0;
        for(ll t : v) {
            people += mid/t;
        }
        
        if(people < m) {
            start = mid + 1;
        } else {
            ans = min(ans, mid);
            end = mid - 1;
        }
    }
    
    cout << ans;

    return 0;
}
๋ฐ˜์‘ํ˜•