카테고리 없음

[백준/JAVA] 1789번: 수들의 합

imname1am 2023. 5. 23. 13:56
반응형

🔺 문제

 

1789번: 수들의 합

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

www.acmicpc.net

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        long S = Long.parseLong(br.readLine());
        
        long i = 1;
        long cnt = 0;
        while(true) {
            if(i < (S - i)) {
                S -= i;
                cnt++;
                i++;
            }
            else {
                break;
            }
        }
        
        System.out.println(cnt + 1);
    }
}
cs
✅ 해결 아이디어
✔ 그리디
- 빼는 값 i 가 빼고 난 결과 S - i 보다 작다면, 이 1부터 빼는 과정을 진행한다. (13번째 줄)
- 이 때 횟수를 나타내는 변수인 cnt에 1을 더한다. (cnt++)
- 다음 과정에서는 현재 숫자에서 1씩 키운 값을 뺀다. (i++)
- 예를 들어 입력받은 값이 200일 때, 해당 과정은 18번 진행되어 cnt 값이 18로 나오는데, 이 때 200에서 18을 뺀 값 한 개도 더해주어야 하므로 cnt + 1 을 했다.

 

💥 유의사항

• long형으로 해야 런타임 에러가 안 남.

 

 


🔺 다른 풀이들

 

- 1부터 수를 키우면서 더해 누적합을 만들고, 이 누적합 값이 S보다 커지기 전까지 이 과정을 반복한다.

 

백준 1789 Java 자바

s를 입력받으면 1부터 1씩 더해가면서 값을 누적시켜 s의 값과 같거나 커지는 숫자를 구한다. 결과값이 s와 같다면 모든 숫자가 필요하므로 i를 출력한다. 결과값이 s보다 크다면 그 차이의 숫자

umilove98.tistory.com

 

[백준] 1789번: 수들의 합(구현)

https://www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = n

zzang9ha.tistory.com

 


💬 느낀 점

어려운 문제는 아니지만..

실버 문제래서 쫀 상태로 풀어봤는데 맞아서 다행이다..

앞으로 이 자신감으로 그리디를 다 풀어보는 걸로!!

 

 

1회독 2회독 3회독 4회독 5회독
V        

 

반응형