반응형
문제
서로 다른 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;
}
}
반응형
'알고리즘 > [ Baekjoon ]' 카테고리의 다른 글
[ Baekjoon ][JAVA][6086] 최대유량 (0) | 2020.09.23 |
---|---|
[ Baekjoon ][JAVA][2188] 축사배정 (0) | 2020.09.23 |
[ Baekjoon ][JAVA][1365] 꼬인 전깃줄 (0) | 2020.09.21 |
[ Baekjoon ][JAVA][2230] 수 고르기 (0) | 2020.09.20 |
[ Baekjoon ][JAVA][2531] 회전초밥 (5) | 2020.09.20 |