728x90
코드 힌트
- 분해합의 개념:
- 분해합이란 어떤 숫자 i와 그 숫자의 각 자릿수를 모두 더한 값을 의미합니다.
- 예를 들어, 숫자 198의 분해합은 198 + 1 + 9 + 8 = 216입니다.
- 생성자 찾기:
- 주어진 n의 분해합을 만들어낼 수 있는 가장 작은 숫자 i를 찾는 것이 목표입니다.
- i를 1부터 n-1까지 검사하여, 분해합이 n과 일치하면 해당 숫자를 반환합니다.
- 자릿수 합 계산:
- 각 숫자 i의 자릿수 합을 계산하기 위해, 숫자를 10으로 나누어가며 각 자릿수를 더합니다.
- 이렇게 계산한 자릿수 합과 i를 더해 n과 비교합니다.
- 결과 반환:
- 만약 n의 분해합을 만들어낼 수 있는 숫자 i가 없다면 0을 반환합니다.
정답은 더보기 클릭
더보기
import java.io.*;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
// BufferedReader와 BufferedWriter를 사용해 입출력 처리
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 입력된 수 n 읽기
int n = Integer.parseInt(br.readLine());
// 분해합의 생성자 구하기
bw.write(getDecompositionSum(n) + "\n");
// BufferedWriter의 남은 데이터를 출력
bw.flush();
bw.close();
}
// 주어진 숫자 n의 분해합을 만들어내는 가장 작은 생성자를 찾는 메서드
public static int getDecompositionSum(int n) {
int sum = 0; // 분해합을 계산할 변수
// 1부터 n-1까지의 모든 숫자 i에 대해 생성자 여부를 확인
for (int i = 1; i < n; i++) {
sum = i; // i부터 시작
int j = i;
// i의 자릿수 합을 구하기
while (j > 0) {
sum += j % 10; // 자릿수 더하기
j /= 10; // 다음 자릿수로 이동
}
// 만약 n이 i의 분해합과 같다면, i가 생성자
if (n == sum) return i;
}
// 생성자를 찾지 못한 경우 0 반환
return 0;
}
}
728x90
'백준' 카테고리의 다른 글
[백준] 가로수 (2485번) (1) | 2024.09.04 |
---|---|
[백준] 이항 계수 1 (11050번) (0) | 2024.08.30 |
[백준] 최소공배수 (1934번) (0) | 2024.08.26 |
[백준] 카드2 (2164번) (0) | 2024.08.26 |
[백준] 단어 정렬 (1181번) (0) | 2024.08.17 |