티스토리 뷰
728x90
문제
- 어떤 자연수 N이 있을 때, 그 자연수의 분해합은 N과 N을 이루는 각 자리수의 합
- 어떤 자연수 M의 분해합이 N인 경우, M은 N의 생성자
- 어떤 자연수의 경우에는 생성자가 없을 수도 있음
- 생성자가 여러 개인 자연수도 있을 수 있음
- 자연수 N이 주어졌을 때, N의 가장 작은 생성자 출력
- 생성자가 없는 경우에는 0 출력
해결방법
1부터 주어진 자연수까지 숫자를 1씩 증가시키면서 분해합을 구하는 방식으로 코드를 작성하였다. 분해합을 구할 때에는 각자리 수를 더해주기 위해서 나머지 연산, 나누기 연산을 활용하였고, 연산이 끝나면 해당 숫자를 또 더해줘 분해합을 구한 뒤 해당 숫자가 생성자인지 확인할 수 있도록 하였다.
코드
import java.io.*;
import java.util.*;
class Main{
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // 자연수 입력
int result = 0; // 생성자를 저장할 변수
for(int i = 1; i<N; i++){
int num = i; // 나머지, 나누기 연산을 하기 위해 값 복사
int sum = 0; // 분해합 구하기 위한 변수
while(num != 0){
sum += num % 10; // 나머지 연산을 통해 각 자리를 더해줌
num /= 10; // 다음 자리를 더하기 위해 나누기 연산을 진행
}
if(sum + i == N){ // 위에서 계산한 값에 현재 값을 더해서 구한 분해합이 생성자인지 비교
result = i;
break;
}
}
System.out.println(result);
br.close();
}
}
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 2609번 최대공약수와 최소공배수(JAVA) (0) | 2022.07.18 |
---|---|
[백준] 2292번 벌집(JAVA) (0) | 2022.07.17 |
[백준] 2164번 카드2(JAVA) (0) | 2022.07.17 |
[백준] 2108번 통계학(JAVA) (0) | 2022.07.14 |
[백준] 1978번 소수 찾기(JAVA) (0) | 2022.07.14 |
댓글