[ Algorithm ] 백준 2231번 : 분해합 - [JAVA]

Minsu Lee·2023년 2월 14일
0

baekjoon

목록 보기
3/16
post-thumbnail

🎆백준 2331번 분해합🎆


📌문제

🔍문제 설명

문제 링크 : https://www.acmicpc.net/problem/2231

🔍예제 입력

216

🔍예제 출력

198


📌풀이

🔍풀이 설명

Bruteforcing 방식으로 풀이하는 문제이다.

Brute-Force : 완전탐색 알고리즘으로 볼 수 있다. 즉, 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져온다. 이 알고리즘의 강력한 점은 예외 없이 100%의 확률로 정답만을 출력한다.

1부터 하나씩 증가하며 N의 생성자가 되는 값을 구한다. (생성자는 문제에서 설명한 것과 같다. e.g. 123 + 1 + 2 + 3 = 129 이때 129의 생성자는 123이 된다.) 가장 처음으로 발견된 생성자가 최소값이고, 생성자는 항상 N보다 작다는 것을 조건으로하는 반복문을 이용하였다. 모두 더하는 부분은 int -> String -> char[] 을 이용해 길이를 구하고 하나씩 더하는 방식으로 풀이하였다.

🔍코드

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

//분해합
public class p2231 {
    public static void main(String[] args)throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int createNumber=0;
        int sum =0;

        //생성자는 N보다 무조건 작다.
        while (N>createNumber){
            sum = 0;
            createNumber++;
            String cn = Integer.toString(createNumber);
            int len = cn.length();
            char c[] = cn.toCharArray();

            //생성자길이 만큼 반복 e.g.) 129 = 123 + 1 + 2 + 3 여기서 + 1 + 2 + 3
            for(int i=0; i<len; i++){
                sum += c[i]-'0';
            }
            //생성자 자체 숫자 더하기 e.g.) 129 = 123 + 1 + 2 + 3 여기서  + 123
            sum += createNumber;
            // 입력값과 같은지 확인
            if(sum == N){
                break;
            }
        }
        if(sum==N){
            // 생성자가 있는 경우
            System.out.println(createNumber);
        }
        else{
            // 생성자가 없는 경우
            System.out.println(0);
        }
    }
}

👋마무리👋

숫자를 String-> char[] 식으로 저장해서 생성자 길이만큼 하나씩 더하는 방법을 사용했는데, 조금 더 단순한 방법을 찾고 싶다 10의 나머지를 이용하는 방법으로도 풀 수 있을 것 같다! ㅎ.. 다음에 풀어서 정리해봐야겠...!

profile
빙글빙글

0개의 댓글