백준_1789번_수들의 합_자바
https://www.acmicpc.net/problem/1789
1789번: 수들의 합
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
www.acmicpc.net
이번 문제의 로직은 단순한 그리디 알고리즘 문제이나, 함정이 조금 있습니다.
문제 해석 -
"서로 다른 N개의 자연수의 합이 S일 때, 자연수 N의 최댓값은 얼마인가?" 이다.
최댓값을 구해야하기에 입력받은 숫자보다 큰 숫자가 될때까지 제일 낮은 수인 1부터 계속 더한후,
더 큰 숫자가 되었을때 초과한 만큼의 숫자만 빼주면된다.
예를들어 7을 입력하였을 경우
7 은 1+2+3+4 가 될때 7을 초과하게된다.
그때 총합인 숫자 10에서 -3만 해주면 7이 되므로, 총 숫자의 개수는 3개가 된다.
주의사항 -
1. 문제를 잘 읽어야한다, 더한 자연수들의 최대값이 아니라 더한 자연수의 최대 개수이다.
2. 입력 받는 수의 범위 때문에 long타입을 써야한다.
3. sum과 자연수의 합이 같은 경우도 생각해야한다. [ 범위 ]
로직 -
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long n = Long.parseLong(st.nextToken());
long sum = 0L;
int rt = 1;
while (sum <= n){
sum = sum + rt++;
}
System.out.println(rt-2);
}
}
'CodingTest' 카테고리의 다른 글
백준_15649번_N과 M (1)_자바 (1) | 2024.02.01 |
---|---|
백준_1463번_1로 만들기_자바 (0) | 2024.01.23 |
백준_11724번_연결 요소의 개수_자바 (0) | 2024.01.18 |
백준_11659번_구간 합 구하기 4_자바 (2) | 2024.01.16 |
백준_2644번_촌수계산_자바 (2) | 2024.01.09 |