알고리즘

백준 1789번 수들의 합 (JAVA)

박카스마시며코딩 2022. 1. 5. 19:22

https://www.acmicpc.net/problem/1789

 

1789번: 수들의 합

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

www.acmicpc.net

 

저는 해당 문제를 수열의 합 공식을 통해 해결하였습니다. 

합이 주어지고 서로 다른 N개의 자연수의 합이 이와 같아야 되기 때문에 저는 제일 작은 1부터 차근차근 더해가면서 늘리는 것을 생각하였습니다. 그리고 1부터 N까지의 합이 주어진 S와 같다면 좋겠지만, 이와 다를 수 있습니다. 

만약 1~N까지으로 이를 표현하지 못한다면, 1~N까지의 합이 S를 넘는 바로 N값에서 1을 뺏습니다.

이유는 1~ n-1의 합에서 S의 나머지 값을 n-1에 더해주면 된다고 생각을 하였습니다.

여기서 1~n의 합이 S보다 작기 때문에 (S - (1~n-1의합))의 값은 필연적으로 1 ~ n-1사이의 자연수가 되게 됩니다.

package BOJ.Greedy;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.function.Function;

public class BOJ_1789 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Function<String,Long> stol = Long::parseLong;
        long n = stol.apply(br.readLine());
        long result = 0;
        for(long i = 1 ; i <= n ; i++){
            long temp = (i*(i+1)) / 2;
            if(temp > n){
                result = i-1;
                break;
            }else if(temp == n){
                result= i;
                break;
            }
        }
        System.out.println(result);
    }
}

 

'알고리즘' 카테고리의 다른 글

백준 17086번 아기 상어2 (JAVA)  (0) 2022.01.10
백준 1939번 중량제한 (JAVA)  (0) 2022.01.07
백준 14179번 빗물 (JAVA)  (0) 2022.01.04
백준 2504번 괄호의 값 (JAVA)  (0) 2022.01.03
백준 1259번 팰린드룸수 (JAVA)  (0) 2022.01.02