알고리즘/GREEDY

BJ_S5_1789_수들의합 - Java

naksnaks 2022. 6. 6.
반응형

[문제링크]

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

 


[설명]

이 문제는 그리디 문제이다.
사실 이 문제는 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

댓글

💲 추천 글