알고리즘
백준 No.1789 수들의 합 - JAVA
jaewoo
2023. 2. 9. 14:09
문제
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
입력
첫째 줄에 자연수 S가 주어진다.
(1 ≤ S ≤ 4,294,967,295)
https://www.acmicpc.net/problem/1789
1789번: 수들의 합
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
www.acmicpc.net
일단 S의 범위가 크므로 long을 받아서 해야한다. 처음에 int로 했었는데 시간초과...
문제 풀이
- 1부터 주어진 숫자까지 for루프를 돌면서 num에 루프 인덱스를 계속 더해 나간다. 그러면 num은 점점 값이 커질 것이고 결국 주어진 값을 넘어갈 것이다. 주어진 값을 넘긴 순간 break를 걸어야 한다.
- 여기에 문제 조건은 서로다른 N개의 자연수의 최댓값이다. 결국 1부터 최대한 작은 서로다른 자연수롤 더하여 주어진 숫자를 만드는 것치 최댓값이다.
- 200일 경우 1부터 계속 더해지다가 num이 210일때 for문이 멈춘다. 210까지일 경우 총 20개의 자연수인데 여기서 간단하게 10만 뺴주면 주어진 값과 일치한다. 계속 서로 다른 작은 값(1부터)을 더해 온 것이기에 여기서 더 많은 수를 구할 수 없다. 그렇기 때문에 count에서 1을 빼주면 정답이다.
로그로 살펴보면
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long number = sc.nextLong();
long num = 0;
long count = 0;
for(int i=1;;i++){
if(num > number){
break;
}
num += i;
count++;
}
System.out.println(count-1);
}
}