문제
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
입력
첫째 줄에 자연수 S가 주어진다.
(1 ≤ S ≤ 4,294,967,295)
https://www.acmicpc.net/problem/1789
일단 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);
}
}
'알고리즘' 카테고리의 다른 글
백준 No.24445 알고리즘 수업 - 너비 우선 탐색 2 - JAVA (0) | 2023.02.10 |
---|---|
백준 No.24446 알고리즘 수업 - 너비 우선 탐색 3 - JAVA (0) | 2023.02.09 |
백준 No.10451 순열 사이클 - JAVA (0) | 2023.02.08 |
백준 No.13458 시험감독 - JAVA (0) | 2023.02.07 |
백준 No.1459 걷기 - JAVA (0) | 2023.02.06 |