본문 바로가기
코딩 테스트

백준 2231번 분해합(자바,java,JAVA)

by 주용사 2023. 1. 11.
728x90

탐색의 시작점 찾아내서 푼 케이스도 존재하더라. 최소 몇부터 시작해야하는지

public class Main {

public static void main(String args[]) throws Exception

{

​

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

//StringBuilder sb = new StringBuilder();

​

int num = Integer.parseInt(br.readLine());

​

String checklength = Integer.toString(num);

int length = checklength.length() -1 ; // 1000이라면 길이값이 4가나와서 -1해준다.

​

​

int c;

if(length == 0) // c의 시작 값을 조절하는 것. c가 11이라면 0부터 c가 100 이라면 10부터

c = 0;

else

c = (int) Math.pow(10, length-1); // 증가시키며 비교할 숫자

int temp = 0; // c의 자리수를 만들어 줄 숫자

int sum = 0;

int answer = num;

​

while (c <= num) 

{

sum = c;

temp = c;

/************************ 각 자리수의 합을 만드는 루프 *******************************/

for (int i = (int) Math.pow(10, length); i >= 1; i /= 10) // 각 자리수의 합을 만드는 루프

{

if (i != 0) 

{

sum += (temp / i);

temp = temp - (temp / i) * i;

} 

else

sum += temp;

}

/***************************************************************************/

if (sum == num) 

{

if (c < answer) // 새로운 생성자의 값이 작으면 다시 넣어준다.

{

answer = c;

break;

}

}

c++;

}

​

if (answer == num) // 생성자를 못 찾았다면 위에 answer에 넣어준 num의 값이 변하지 않았으므로(못찾았다의 의미가 된다)

answer = 0;

​

System.out.println(answer);

​

br.close();

}

}
728x90