반응형
🔺 문제
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 |
반응형