본문 바로가기

CS ﹒ Algorithm/Baekjoon

JAVA 백준 문제풀이 (17) 2231:분해합

 



 

 

 

브루트 포스 카테고리에 있는 문제이다.

친절하게 분해합이 무엇이고 어떻게 구하는지 알려주고 있다.

따라서 우리는 1부터 더해나가며 입력값이 나올 떄까지 모든 분해합을 구하면 된다.

 

그런데 조건을 보니 자연수가 1 ~ 1,000,000까지라고 한다.

아무리 브루트 포스라는 단어 자체가 노가다를 뜻한다고 하지만 그건 프로그램이 노가다를 한다는 거고.. 우리가 if문으로 입력값의 각 자리수별로 반복문을 만들어줄 수는 없다.

 

나머지(%) 연산자와 나눗셈(/) 연산자를 활용하면 아주 간단하게 해결할 수 있는 문제이다.

단순한 문제라서 크게 설명할 것이 없다.. 

혹시나 이해가 안된다고 하더라도 코드를 보면 바로 알 수 있을 것이다.

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputNum = Integer.parseInt(br.readLine());
        boolean solvedIt = false;

        for ( int i=0; i<inputNum; i++ ) {
            int temp = i;
            int sum = i;

            while (temp > 0) {
                sum += temp % 10; // i에 i의 각 자리수를 더한다
                temp = temp/10;
            }

            if (sum == inputNum) { // 그 결과가 인풋값과 같으면 정답
                System.out.println(i);
                solvedIt = true;
                break;
            }
        }

        if (!solvedIt) { System.out.println(0); }
        }
    }