#include <iostream>
using namespace std;
int main(void)
{
long long int a=0;
cin>>a;
int count=0;
long long int sum=0;
long long int i=1;
while(true)
{
if(a-(sum+i)<=i)
{
count++;
break;
}
sum=sum+i;
i++;
count++;
}
cout<<count;
return 0;
}
이 문제는 서로 다른 N개의 자연수의 합이 S일 때 자연수 N의 최댓값을 구하는 문제이다.
S는 입력으로 주어진다.
S가 7이 입력되었다고 생각해 보자. 그러면 1+2+4(3개)가 된다. 서로 다른 자연수의 개수는 3개이다.
7-(3+3)<=3 여기서 걸려서 while문을 빠져나온다.
이 문제에서 입력값의 범위는 S(1 ≤ S ≤ 4,294,967,295)이다. if(a-(sum+i)<=i) 여기서 int값의 범위를 넘어 버릴 수 있기 때문에 long long int로 선언해 주어야 한다.
'백준 > 그리디' 카테고리의 다른 글
[백준] C++ 1946(신입 사원) (0) | 2024.07.05 |
---|---|
[백준] C++ 16953(A->B) (0) | 2024.07.05 |
[백준] C++ 1041번(주사위) (0) | 2024.07.03 |
[백준] C++ 12904번(A와 B) (0) | 2024.07.02 |
[백준] C++ 1744(수 묶기) (0) | 2024.06.29 |