Algorithm/Math

(Java/자바) - 백준(BOJ) 1789번 : 수들의 합

하눤석 2022. 8. 12. 17:27
728x90

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

 

1789번: 수들의 합

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

www.acmicpc.net


  • 문제 : 

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

 

 

 


  • 풀이 :

수학 문제였습니다.

 

처음에는 문제를 더할 수 있는 수의 최댓값을 찾는 줄 알고 잘못 생각했는데 보니까 수들의 개수인 N의 최댓값을 찾는 문제였습니다.

 

N이 1과 2일 경우를 제외(항상 1)하고 1부터 S+1까지 더합니다. 이 때, 누적 합의 값이 S보다 커질 때 수의 개수에서 1을 빼주면 됩니다.

 

예를 들어, S = 30이라면 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36 이므로 여기서 6을 뺀 값이 S를 만들 수 있는 최대 개수이고 이는 8 - 1인 7입니다.

 

만약 N까지 더했을 때 딱 떨어지는 수 ( ex : 3, 6, 10, 15, 21, 28 ....) 이라면 -1을 하지 않은 값을 출력해야 합니다.  

 

 

 


  • 소스코드 : 

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		long N = sc.nextLong();
		long sum = 0;
		if (N == 1 | N == 2 ) {
			System.out.println(1);
			return;
		}
		for (int i = 0; i < N; i++) {
			sum += i;
			if (sum > N) {
				System.out.println(i-1);
				break;
			} else if (sum==N) {
				System.out.println(i);
				break;
			}
		}
	}
}
320x100