코딩은 마라톤

[백준] 1789번 : 수들의 합 – JAVA [자바] 본문

CS/알고리즘

[백준] 1789번 : 수들의 합 – JAVA [자바]

anxi 2023. 10. 15. 21:25

[Silver V] 수들의 합 - 1789

문제 링크

성능 요약

메모리: 17732 KB, 시간: 208 ms

분류

그리디 알고리즘, 수학

문제 설명

서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?

입력

첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.

출력

첫째 줄에 자연수 N의 최댓값을 출력한다.

 


  • 문제 풀이

시그마 공식을 이용하였다.

  1. 자연수 s를 입력 받는다.
  2. 위의 식에서 n을 1부터 계속 1씩 증가시키면서 반복문을 수행한다.
    1. 만약 합이 입력 받은 s보다 커질 경우를 확인해야 한다. (작은 경우를 확인할 경우, 만약 191이 입력될 경우 출력은 19가 아닌 20이 n이 되기 때문이다.
    2. 따라서 나는 합이 s보다 커질 경우, n에 1을 뺀 값을 출력하고 반복문을 빠져나오도록 하였다. 

  • 코드
import java.util.*;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        long s = sc.nextLong();

        long n = 1;

        while(true){
            if (n * (n + 1) / 2 > s) {
                System.out.println(n - 1);
                break;
            } else n++;
        }

    }
}