[백준] 분해합 2231번
나의 풀이
public class Bunhaehab {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int answer = 0;
int start = N - (String.valueOf(N).length() * 9);
for(int i = start; i < N; i++) {
int num = i, sum = i;
while(num != 0) {
sum += num % 10;
num /= 10;
}
if(N == sum) {
answer = i;
break;
}
}
System.out.println(answer);
}
}
- N을 입력받는다.
- 숫자를 탐색할 범위를 정해줘야 하는데, 1부터 체크하기에는 너무 비효율적인 것 같다. 숫자 자기 자신 + 각 자리수를 계산하여 N이 되는 수를 찾는 문제이다. 각 자리수마다 올 수 있는 최대 숫자는 9이기 때문에, (N - 자리수 * 9) 부터 N 전까지 탐색하도록 범위를 설정하였다.
- 탐색을 하면서, 해당 범위 내의 숫자 + 각 자리수가 N과 같다면 anwer의 값을 해당 숫자로 바꾸고, 반복을 종료한다.