알고리즘/[ Baekjoon ]

[ Baekjoon ][JAVA][1789] 수들의 합

kim.svadoz 2020. 9. 22. 11:10
반응형

www.acmicpc.net/problem/1789

 

1789번: 수들의 합

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

www.acmicpc.net

문제

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

입력

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

출력

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

예제입력

200

예제출력

19

접근

문제의 풀이는 가장 많은 수를 사용해야 하기 때문에 1부터 더해가면서 주어진 S를 넘지 않는 선까지 모두 더했을 때 마지막 더한 값이 된다. 여기서 주의해야 할 점은 1부터 모든 수를 더했을 때 주어진 S보다 커질 때 이다.
만약 모든 수를 더했을 때 주어진 S보다 크다면 N까지 더한 수에서 S를 만들기 위해 어떤 자연수 하나를 빼면 됨.

코드

import java.util.*;
import java.io.*;
class Main {
    public static long S;
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        S = Long.parseLong(br.readLine());
      
        System.out.println(solve(S));
    }
    public static int solve(long n){
        long sum = 0;
        int addNum = 0;
        while(n >= sum){
            sum += (++addNum);
        }
        return sum==n ? addNum : addNum-1;
    }
}
반응형