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

[๋ฐฑ์ค€,c++] 11561๋ฒˆ - ์ง•๊ฒ€๋‹ค๋ฆฌ

by ์•ˆ์ฃผํ˜• 2022. 9. 7.

๋ฌธ์ œ

 

11561๋ฒˆ: ์ง•๊ฒ€๋‹ค๋ฆฌ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ํ•œ ์ค„์— ์Šนํƒ์ด๊ฐ€ ๋ฐŸ์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ง•๊ฒ€๋‹ค๋ฆฌ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <cmath>
#define ll unsigned long long int
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int T; cin>>T;
    while(T--){
        ll n; cin>>n;
        ll start = 1, end = 1e16;
        ll ans = 0;
        while(start <= end){
            ll mid = (start + end) / 2;
            if(mid * (mid+1) <= 2*n){
                ans = max(ans, mid);
                start = mid+1;
            }
            else end = mid - 1;
        }
        cout<<ans<<'\n';
    }
}

 

ํ’€์ด

์ด๋ถ„ ํƒ์ƒ‰ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

  1. ์ฒซ ์ง•๊ฒ€๋‹ค๋ฆฌ๋Š” ์ ํ”„ํ•ด์„œ ์•„๋ฌด๊ฒƒ์ด๋‚˜ ๋ฐŸ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด ์ ํ”„๊ฐ€ ์ฒซ ์ ํ”„์ด๋‹ค.
  2. ๋‘ ๋ฒˆ์งธ ์ ํ”„๋ถ€ํ„ฐ๋Š” ์ด์ „์— ์ ํ”„ํ•œ ๊ฑฐ๋ฆฌ๋ณด๋‹ค 1 ์ด์ƒ ๋” ๊ธด ๊ฑฐ๋ฆฌ๋ฅผ ๋›ฐ์–ด์•ผ๋งŒ ํ•œ๋‹ค.
  3. N๋ฒˆ ์ง•๊ฒ€๋‹ค๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ ๋ฐŸ์•„์•ผ ํ•œ๋‹ค.
  4. N๋ฒˆ ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๋ฐŸ์€ ํ›„ ๊ฐ• ๊ฑด๋„ˆ๋กœ ์ด๋™ํ•  ๋• ์ ํ”„๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์œ„์˜ ๊ทœ์น™์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋‹ค์Œ ์กฐ๊ฑด์„ ์ด์šฉํ•ด์„œ N๋ฒˆ๊นŒ์ง€์˜ ์ง•๊ฒ€๋‹ค๋ฆฌ๊ฐ€ ์žˆ์„ ๋•Œ ๋ฐŸ์„ ์ˆ˜ ์žˆ๋Š” ์ง•๊ฒ€๋‹ค๋ฆฌ์˜ ์ตœ๋Œ€ ์ˆ˜๋Š” ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1 + 2 + 3 + 4 + 5  + ..... (N-2) + (N-1) + N

์œ„ ์‹์€ ๋“ฑ์ฐจ์ˆ˜์—ด๋กœ์จ (N * (N+1)) / 2๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 1 ~ 10^16 ๊นŒ์ง€์˜ ์ˆ˜์ค‘ ํ•˜๋‚˜๋ฅผ ์ด๋ถ„ ํƒ์ƒ‰์œผ๋กœ ์„ ํƒํ–ˆ์„ ๋•Œ ํ•ด๋‹น ๊ฐ’์˜ ๋“ฑ์ฐจ์ˆ˜์—ด์˜ ํ•ฉ์ด N๋ณด๋‹ค ์ž‘์„ ๋•Œ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ฐพ์•„์„œ ์ถœ๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€