# BOJ01789 수들의 합
https://www.acmicpc.net/problem/1789 (opens new window)
서로 다른 N개의 자연수의 합은 S
이다. S
를 알 때, 자연수 N
의 최대값을 구한다.
1부터 값을 증가시키며 S
에 근접한 수를 만들어준다. 만약 S
의 값이 50
이라고 가정하자.
1 = 1
1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10
1 + 2 + 3 + 4 + 5 = 15
1 + 2 + 3 + 4 + 5 + 6 = 21
1 + 2 + 3 + 4 + 5 + 6 + 7 = 28
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
count
를 증가시키며 자연수를 더하다 보면 50
보다 크고 가장 근접하는 55
를 얻게 되었다.
여기서 s
와 55
의 차이는 기존에 더한 자연수
에 포함
되는 것을 보장한다. 즉 10보다 작은 자연수
일 것이다.
그렇기 때문에 50
과 55
의 차이인 5
를 뺀 총 9
개가 자연수 개수의 최대값인 N
이 된다.
아래는 최종 코드이다.
import java.util.Scanner;
public class BOJ1789 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long s = scanner.nextLong();
long count = 1;
long sum = 1;
// count를 증가시키며 더해준다.
while (sum < s) {
sum += ++count;
}
// 합산 결과가 s보다 큰 경우 count를 줄여준다.
if (sum > s) {
count--;
}
System.out.println(count);
}
}