☕Language: Java
🚨 고민해보다 푸는 방법을 도저히 모르겠어서, 풀이를 찾아 봄
😮 찾아본 풀이
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int i = 0;
for (i = 0; i < N; i++) {
int num = i;
int sum = 0;
while (num != 0) {
sum += num % 10;
num /= 10;
}
if ((sum + i) == N) {
bw.write(i + "");
break;
}
}
if (i == N) {
bw.write("0");
}
bw.flush();
bw.close();
}
}
|
1. while 반복문
- num: 생성자
- sum: 생성자 각 자리의 합
⭐ sum을 구하기 위해 생성자 역할을 하는 i 이외에도 i와 동일한 값을 갖는 num 선언
2. if 조건문
- 분해합이 입력된 수와 동일한 경우가 없을 때, i는 for문을 다 돌고, i==N일 때 마무리되므로 조건식을 다음과 같이 선언
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = br.readLine();
int N = Integer.parseInt(s);
int i = 0;
for (i = N - s.length() * 9; i < N; i++) {
int num = i;
int sum = 0;
while (num != 0) {
sum += num % 10;
num /= 10;
}
if ((sum + i) == N) {
bw.write(i + "");
break;
}
}
if (i == N) {
bw.write("0");
}
bw.flush();
bw.close();
}
}
|
⭐ 생성자의 범위
- 생성자 + 자리수의 합 == 입력값
- 생성자 == 입력값 - 자리수의 합
- 자리수의 합이 최대일 경우, 생성자는 최소
- 만일 생성자 후보가 자리수 합이 최대일 때의 생성자보다 작다면 입력값을 만들 수 없음
🤔 추가
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = br.readLine();
int N = Integer.parseInt(s);
int i = 1;
for (i = N - s.length() * 9>=1 ? N - s.length() * 9 : 0; i < N; i++) {
int num = i;
int sum = 0;
while (num != 0) {
sum += num % 10;
num /= 10;
}
if ((sum + i) == N) {
bw.write(i + "");
break;
}
}
if (i == N) {
bw.write("0");
}
bw.flush();
bw.close();
}
}
|
- 생성자는 자연수이므로 i의 최소값을 1로 변경
🔗 소스 코드
HJ0216/TIL/BOJ
📚 참고 자료
'Computer > Algorithm_Java' 카테고리의 다른 글
[BaekJoon] 1735번 분수 합 문제풀이 (Success) (0) | 2023.08.09 |
---|---|
[BaekJoon] 11651번 좌표 정렬하기 2 문제풀이 (Success) (0) | 2023.08.08 |
[BaekJoon] 9012번 괄호 문제풀이 (Success) (0) | 2023.08.05 |
[BaekJoon] 10773번 제로 문제풀이 (Success) (0) | 2023.08.04 |
[BaekJoon] 11650번 좌표 정렬하기 문제풀이 (Success) (0) | 2023.08.04 |