Algorithm (PS)/백준
[백준] 1789. 수들의합 (Java) [이분탐색]
태크민
2023. 7. 8. 17:25
문제
https://www.acmicpc.net/problem/1789
1789번: 수들의 합
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
www.acmicpc.net
알고리즘
이분탐색 + 수학
풀이
N까지의 합의 공식과 이분탐색을 이용해서 풀이를 했다.
left+ right/2, 즉, 중간 값을 구해서 S를 찾아가는 과정이며
자세한 건 풀이를 보자.
코드
package com.company;
import java.io.*;
public class Test_BinarySearch {
static long MAX = 4294967295L;
static long ans = 0;
public static void main(String args[]) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
long S = Long.parseLong(bf.readLine());
long left = 0;
long right = MAX;
while (left <= right) {
long mid = (left + right) / 2;
if (((mid * (mid+1)) / 2) > S){
right = mid-1;
}else{
left = mid+1;
ans = mid;
}
}
bw.write(String.valueOf(ans));
bw.flush();
bw.close();
}
}
이분탐색이 아닌 1중 for문을 이용해서 풀이를 하는 방법도 있는 것 같다.