반응형
[문제링크]
https://www.acmicpc.net/problem/1789
[문제]
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
[입력]
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
[출력]
첫째 줄에 자연수 N의 최댓값을 출력한다.
[예제 입력 1]
200
[예제 출력 1]
19
[설명]
이 문제는 그리디 문제이다.
사실 이 문제는 for문으로 해결하려 했지만, 왜인지 모르게 100%에서 '틀렸습니다'가 나온다. 그래서 while문을 사용하게 되었다. 혹시 반례나 왜 틀렸는지 아시는분이 있으시다면 댓글부탁드려요!
(S가 1일 때 0 값이 나오므로 1일 경우 조건문을 추가해주면 해결 된다.)
숫자의 개수가 가장 많으려면 가장 작은 자연수인 1부터 차근차근 더해줘야 한다.
while문을 돌며 Sum한 값이 S보다 클 경우 while문을 빠져나오면 해결된다.
<틀린 코드>
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scann = new Scanner(System.in);
long S = scann.nextLong();
long sum=0;
long count=0;
for(long i=1;i<=S;i++) {
sum+=i;
count++;
if(S<sum) {
break;
}
}
// 추가 수정된 부분 ////////////
if(S==1){
count=2;
}
///////////////////////////////
System.out.println(count-1);
}
}
백준 알고리즘 1789번 JAVA풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scann = new Scanner(System.in);
long S = scann.nextLong();
long sum=0;
long count=0;
long i=1;
while(true) {
sum+=i;
count++;
if(sum>S) {
count--;
break;
}
i++;
}
System.out.println(count);
}
}
궁금하신 부분이나 부족한 점은 댓글로 알려주시면 감사하겠습니다.
반응형
'알고리즘 > GREEDY' 카테고리의 다른 글
BJ_S4_13305_주유소 - Java (0) | 2022.06.06 |
---|---|
BJ_G4_13975_파일 합치기 3 - Java (0) | 2022.01.30 |
BJ_G5_19598_최소 회의실 개수 - Java (0) | 2022.01.24 |
BJ_S4_2217_로프 - Java (0) | 2022.01.23 |
BJ_B4_10162_전자레인지 - Java (0) | 2022.01.23 |
댓글