본문 바로가기

백준

[백준] 분해합 (2231번)

728x90

코드 힌트

  1. 분해합의 개념:
    • 분해합이란 어떤 숫자 i와 그 숫자의 각 자릿수를 모두 더한 값을 의미합니다.
    • 예를 들어, 숫자 198의 분해합은 198 + 1 + 9 + 8 = 216입니다.
  2. 생성자 찾기:
    • 주어진 n의 분해합을 만들어낼 수 있는 가장 작은 숫자 i를 찾는 것이 목표입니다.
    • i를 1부터 n-1까지 검사하여, 분해합이 n과 일치하면 해당 숫자를 반환합니다.
  3. 자릿수 합 계산:
    • 각 숫자 i의 자릿수 합을 계산하기 위해, 숫자를 10으로 나누어가며 각 자릿수를 더합니다.
    • 이렇게 계산한 자릿수 합과 i를 더해 n과 비교합니다.
  4. 결과 반환:
    • 만약 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