부분합
- 즉 각자리 숫자가 a, b, c라면
- N=abc+a+b+c가 주어졌을 때 만족하는 가장 작은 abc를 구해야 한다.
- 완전 탐색하기
- N이 1일 때부터 가정하며 나머지 연산으로 각 자릿수를 구해서 가장 작은 abc를 구한다.
- 보완)))
- N이 가장 작아지려면, 결국 각 자리숫자가 커야한다.
- 즉 a, b, c가 999인 경우 N은 작아진다.
- 가장 작은 N의 값을 1이 아닌 a, b, c가 각각 9일 때를 가정하고 반복문을 실행한다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int min = Integer.MAX_VALUE;
for(int i=1; i<=N; i++) {
int sum = i;
int m = i;
while(m != 0) {
sum += m%10;
m = m/10;
}
if(sum == N) {
if(i < min) {
min = i;
}
}
}
// 생성자가 없었을 경우
if(min == Integer.MAX_VALUE) bw.write("0");
else bw.write(min+"");
bw.flush();
bw.close();
br.close();
}
}
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int min = 0; // 조건 만족 안하는 경우 초기값임(만족할 때만 값 업데이트)
int start = Math.max(0, N-String.valueOf(N).length()*9); // N의 자릿수가 999같이 가장 큰 경우에, 생성자가 작아지기 때문
for(int i=start; i<=N; i++) {
int sum = i;
int temp = i;
while(temp != 0) {
sum += temp%10;
temp = temp/10;
}
if(sum == N) { // 조건을 만족하면 저장하고 빠져 나가기
min = i;
break;
}
}
bw.write(min+"");
bw.flush();
bw.close();
br.close();
}
}