[백준 1789번] 수들의 합

2022. 4. 26. 01:26코딩 테스트(JAVA)/백준

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

 

1789번: 수들의 합

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

www.acmicpc.net

 

문제

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

입력

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

출력

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

예제 입력 1 복사

200

예제 출력 1 복사

19

 

 

문제 분석

1. 최대한 작은 수들로만 합을 구하면 이게 N의 최댓값이 됩니다.

2. 주어진 S의 범위가 int 범위를 벗어나므로 long으로 선언해야 합니다.
    int 대략적인 범위  : -21억 ~ 21억

 

 

성공 코드

import java.util.*;

public class Main {
	
	public static void main(String[] args) {
		Scanner kb = new Scanner(System.in);
		long S = kb.nextLong();
		int N = 0;
		long sum = 0;
		for(int i=1; ; i++) {
			if(sum > S) break;
			sum += i;
			N++;
		}
		
		System.out.println(N-1);
	
	}

}

입력 예시로 확인하는 것보다 S = 5를 대입해보면 쉽게 알 수 있습니다.

N = 0
sum = 0

sum = 1+2+3
N = 1+1+1 -> 여기서 -1한 것을 출력합니다.

 

 

 


 

 

for문을 작성할 때, 조건식과 증감식 부분에 어떤 것을 적어야 할지 망설여질 때가 있습니다.

for문에서 초기화, 조건식, 증감식을 생략할 수 있는 경우에 대해 간략하게 알아보도록 하겠습니다.

 

 

Case 1. 초기화 생략

int i = 0;
for( ; i<10; i++) {
	...
}

이미 이전에 값이 초기화되어서 for문 내부에서 또다시 값을 지정할 필요가 없는 경우입니다.

 

 

Case 2. 조건식 생략

for(i=0; ; i++) {
	sum += i;
    	if(sum > 100) break;
}

오늘 푼 문제와 같은 경우입니다, 반복 수행에 대한 조건이 수행문 내부에 있는 경우입니다.

 

 

Case 3. 증감식 생략

for(i=0; i<10; ) {
	...
    i = (++i) % 5;
}

증감식에 대한 연산이 복잡하거나 다른 변수의 연산 결괏값에 의해 결정되는 경우입니다.

 

 

Case 4. 무한 반복

for( ; ; ) {
	...
}

 

 

 

 

 

출처 :

https://computer-science-student.tistory.com/287