[백준 1789번] 수들의 합
2022. 4. 26. 01:26ㆍ코딩 테스트(JAVA)/백준
https://www.acmicpc.net/problem/1789
문제
서로 다른 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( ; ; ) {
...
}
출처 :
'코딩 테스트(JAVA) > 백준' 카테고리의 다른 글
[백준 14888번] 연산자 끼워넣기 (0) | 2022.04.27 |
---|---|
[백준 10872번] 팩토리얼(재귀) (0) | 2022.04.26 |
[백준 1292번] 쉽게 푸는 문제 (0) | 2022.04.24 |
[백준 1978번] 소수 찾기 (0) | 2022.04.23 |
[백준 2693번] N번째 큰 수 (0) | 2022.04.23 |