본문 바로가기

알고리즘 문제

[C/C++ 백준 1789번] 수들의 합 (Silver 5)

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

수들의 합을 1부터 N까지 더한다고 하고 가정하고, S보다 작은 합인 최대 N을 구하면 된다(나머지는 그냥 더하면 맞춰짐.) 그래서 근의 공식을 써서 N의 범위를 구하고, 최대 N을 찾으면 된다.

코드는 다음과 같다.

 

#include <cstdio>
#include <cmath>
using namespace std;
int main(void){
	long long int S, N;
	scanf("%d", &S);
	N=(long long int)(-1+sqrt(1+8*S))/2;
	printf("%d",N);
}