๐Ÿ•๏ธ ICPC Sinchon/Binary Search

[BOJ B2][C++] ๋ฐฑ์ค€ 2858๋ฒˆ: ๊ธฐ์ˆ™์‚ฌ ๋ฐ”๋‹ฅ

์„ ๋‹ฌ 2022. 9. 21. 11:02
๋ฐ˜์‘ํ˜•

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

 

2858๋ฒˆ: ๊ธฐ์ˆ™์‚ฌ ๋ฐ”๋‹ฅ

์ฒซ์งธ ์ค„์— ์ƒ๊ทผ์ด๋„ค ๋ฐฉ์˜ ํฌ๊ธฐ L๊ณผ W์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ๋‘ ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด, ํฐ ์ˆ˜๊ฐ€ L์ด ๋˜๊ณ  ์ž‘์€ ์ˆ˜๊ฐ€ W์ด ๋œ๋‹ค. ํ•ญ์ƒ ์ •๋‹ต์ด ์œ ์ผํ•œ ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ

์ƒ๊ทผ์ด๋Š” ๊ธฐ์ˆ™์‚ฌ ์ƒํ™œ์„ ํ•œ๋‹ค. ์ƒ๊ทผ์ด์˜ ๋ฐฉ์˜ ํฌ๊ธฐ๋Š” L×W ์ด๋‹ค.

์ˆ˜์—…์‹œ๊ฐ„์— ํƒ€์ผ ์ฑ„์šฐ๊ธฐ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋˜ ์ƒ๊ทผ์ด๋Š” ์ž์‹ ์˜ ๋ฐฉ๋„ 1×1ํฌ๊ธฐ ํƒ€์ผ๋กœ ์ฑ„์šฐ๋ ค๊ณ  ํ•œ๋‹ค. ์ด๋•Œ, ๊ฐ€์žฅ์ž๋ฆฌ๋Š” ๋นจ๊ฐ„์ƒ‰์œผ๋กœ, ๋‚˜๋จธ์ง€๋Š” ๊ฐˆ์ƒ‰์œผ๋กœ ์ฑ„์šฐ๋ ค๊ณ  ํ•œ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์€ ์ƒ๊ทผ์ด์˜ ๋ฐฉ์˜ ํฌ๊ธฐ๊ฐ€ 4×3์ผ ๋•Œ ์ด๋‹ค.

์–ด๋Š ๋‚  ์ƒ๊ทผ์ด๋„ค ๋ฐฉ์— ํ•˜๊ทผ์ด๊ฐ€ ๋†€๋Ÿฌ์™”๋‹ค. ํ•˜๊ทผ์ด๋Š” ์•„๋ฆ„๋‹ค์šด ํƒ€์ผ ๋ฐฐ์น˜์— ๊ฐ๋™๋ฐ›์•˜๋‹ค. ๋‹ค์‹œ ๋ฐฉ์œผ๋กœ ๋Œ์•„์˜จ ํ•˜๊ทผ์ด๋Š” ๋นจ๊ฐ„์ƒ‰๊ณผ ๊ฐˆ์ƒ‰ ํƒ€์ผ์˜ ๊ฐœ์ˆ˜๋Š” ๊ธฐ์–ตํ–ˆ์ง€๋งŒ, ๋ฐฉ์˜ ํฌ๊ธฐ๋Š” ๊ธฐ์–ตํ•ด๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค.

๋นจ๊ฐ„์ƒ‰๊ณผ ๊ฐˆ์ƒ‰ ํƒ€์ผ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ƒ๊ทผ์ด ๋ฐฉ์˜ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋นจ๊ฐ„์ƒ‰ ํƒ€์ผ์˜ ์ˆ˜ R๊ณผ ๊ฐˆ์ƒ‰ ํƒ€์ผ์˜ ์ˆ˜ B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (8 ≤ R ≤ 5000, 1 ≤ B ≤ 2,000,000)

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ƒ๊ทผ์ด๋„ค ๋ฐฉ์˜ ํฌ๊ธฐ L๊ณผ W์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ๋‘ ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด, ํฐ ์ˆ˜๊ฐ€ L์ด ๋˜๊ณ  ์ž‘์€ ์ˆ˜๊ฐ€ W์ด ๋œ๋‹ค. ํ•ญ์ƒ ์ •๋‹ต์ด ์œ ์ผํ•œ ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

ํ’€์ด

8%์—์„œ ํ‹€๋ ธ๋‹ค๋ฉด l w ์ˆœ์„œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž

 

// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(int r, int b) {
    vector<int> ans;
    
    int tot = r+b;
    
    for(int i=1; i<tot; i++) {
        if(tot%i != 0) continue;
        
        int l = i, w = tot/i;
        int brown = (l-2)*(w-2);
        
        if(brown == b) {
            ans.push_back(max(l, w));
            ans.push_back(min(w, l));
        }
    }
    
    return ans;
}

int main() {
    int r, b;
    cin >> r >> b;
    
    vector<int> ans = solution(r, b);
    cout << ans[0] << " " << ans[1];

    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•