import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] arge) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int result = 0;
for(int i = 0 ; i < N ;i++) {
int num = find(i); // 분해합 구함....
if(num == N) { // 분해합이 N과 같으면
result = i;
break;
}
}
System.out.println(result);
}
public static int find(int num) {
int number = num;
while(num != 0) {
number = number + (num % 10);
num = num / 10;
}
return number;
}
}
○ 문제 요약
어떤 자연수 N이 주어졌을 때, N을 만들어주는 생성자중 가장 작은 값을 출력해라.
○ 문제 풀이
이전에 포스팅한 셀프 넘버에서 메서드만 활용해서 문제를 풀었기 때문에 크게 어려운 문제는 아니었다.
find() 메서드는 변수로 입력받은 숫자를 분해하고 합해서 나온 값을 반환해주는 메서드이다. 그래서 메인 함수에서 반환 받은 값이 입력한 값과 같을 때, i를 출력해주었다. ( 이때 i는 반환 받은 값의 생성자이기 때문이다.)
생성자가 여러 개일 경우 가장 작은 값을 출력하라고 했는데 num == n 이 성립할 때 i가 가장 작은 값이므로 for문을 더 수행하지 않고 탈출하도록 break를 넣어 여러 개일 경우 값을 비교해서 출력해주는 번거로운 작업을 없앴다.
또한 생성자가 없다면 0을 출력해야 하기 때문에 생성자를 출력할 result변수를 이미 0으로 선언했기 때문에 생성자가 없으면 0이 출력되므로 무난하게 문제를 풀 수 있었다.
○ 결과
'문제풀이 > 백준' 카테고리의 다른 글
백준 9461. 파도반 수열(JAVA) (2) | 2022.03.29 |
---|---|
백준 1003. 피보나치 함수(JAVA) (2) | 2022.03.28 |
백준 2941. 크로아티아 알파벳 (JAVA) (0) | 2022.03.24 |
백준 10989. 수 정렬하기 3(JAVA) (0) | 2022.03.23 |
백준 1065. 한수(JAVA) (0) | 2022.03.22 |