package 백준.자바.수들의합_1789;
import java.io.*;
import java.util.*;
public class Main {
private long S;
boolean Check(long x){
// 결정 문제 : x를 식에 대입한 값이 S보다 작거나 같으면 True
return (x*(x+1))/2 <= S;
}
public void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
S = Long.parseLong(br.readLine());
long lo = 1;
long hi = 4294967295L;
while(lo + 1 < hi){
long mid = (lo + hi) / 2;
if(Check(mid)) lo = mid;
else hi = mid;
}
// 탐색 결과
// lo = 합이 S와 같거나 작은 값중 최대값
// hi = 합이 S보다 큰 값중 최소값
// hi에서 임의의 자연수 하나를 빼서 만든 값의 자릿수 N == hi-1 == lo
System.out.println(lo);
}
public static void main(String[] args) throws Exception{
new Main().solution();
}
}
'문제풀이 > 백준' 카테고리의 다른 글
치킨배달 15686 Java (1) | 2024.01.21 |
---|---|
치즈 2638 Java (1) | 2024.01.21 |
랜선 자르기 1654 Java (0) | 2024.01.19 |
나무 자르기 2805 Java (0) | 2024.01.19 |
1, 2, 3 더하기 7 15992 Java (0) | 2024.01.19 |