본문 바로가기

TIL/Algorithm

Java 백준 2231번 문제 - 분해합

반응형

분해합 성공 다국어

시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 192 MB 64446 29833 23611 46.517%

문제

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자릿수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.

자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

 

출력

첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.

예제 입력 1 

216

예제 출력 1 

198

 


BufferedReader로 입력값을 변수 N으로 받는다 

자연수 N까지의 가장 작은 수를 구하는 것이므로

for문을 돌려서 int형 변수 num을 i로 지정하고

 

while문으로 합계 sum 변수에 각각의 자릿수를 더해준다 

num이 0보다 클 때까지 10으로 나눈 나머지를 더해주고, 10으로 나눠주면

계속해서 일의 자리 숫자를 더해주고 10으로 나눠주게 된다 

 

그리고 if 조건문을 이용하여 각각의 자릿수를 더한 sum과 원래 숫자 i를 더한 값이 생성자가 된다면

result 값에 i를 담고 break (멈춰준다)

이때 break를 쓰는 이유는 가장 작은 생성자를 구해야 하기 때문이다 

 

그리고 만약에 생성자가 없다면 0을 출력해야 하는데

이때, result 변수가 상단에 0으로 선언되어 있기 때문에 조건문을 통과하지 못한다면 즉 생성자가 없다면

자연스레 0을 출력하게 된다 

 

반응형