백준 1789 - 수들의 합

곽무경·2022년 5월 17일
0

Baekjoon

목록 보기
1/14

1789 - 수들의 합 https://acmicpc.net/problem/1789

티어 - Silver 5
알고리즘 분류 - 수학 , 그리디 알고리즘
나의 해결 방안 - 이분 탐색

문제

서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?

입력

첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.

출력

첫째 줄에 자연수 N의 최댓값을 출력한다.

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

int main(void) {
    long long innum;
    cin >> innum;
    if (innum<=2) {
        cout << 1;
        return 0;
    }
    long long left=1, right=200000, mid;
    while (left<=right) {
        mid=(left+right)/2;
        long long midsum=mid*(mid+1)/2, midp1sum=(mid+1)*(mid+2)/2;
        if (innum>=midsum && innum<midp1sum) break;
        else if (innum<midsum) right=mid-1;
        else left=mid+1;
    }
    cout << mid;
}

0개의 댓글