본문 바로가기

백준/C++

[Baekjoon/C++] 1789번 - 수들의 합

[백준] Baekjoon Online Judge

문제로 이동

 

문제

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

 

입력

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

 

출력

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

 


풀이

#include <iostream>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	long long S, N;
	cin >> S;

	for (N = 1; ; N++) {
		S -= N;

		if (S <= 0) break;
	}

	if (S < 0) N--;

	cout << N << '\n';

	return 0;
}

 N의 최댓값을 구하기 위해서는 S를 만드는데 사용하는 숫자가 가능한 작아야 한다. 그렇기에 반복문이 1부터 시작되도록 하였다. 그러다 S의 값이 0보다 작아지면 반복문이 끝나게 된다.

 그 결과 S가 0보다 작다면 사용한 숫자를 하나 빼야하는 것이기에 N의 값을 1 줄어들게 해야 한다.