2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[백준 2231] 분해합 - Java 자바 (브루트 포스)

2023. 9. 26. 00:52ㆍ백준 알고리즘/브루트 포스(완전 탐색)

 

 

 

 

[작성자가 틀린 점]

 

저 같은 경우에는 216만 생각해서

 

100의 자리 하나 십의 자리 하나 일의 자리 하나로 하다가

 

분명 답은 맞는데 안되더라구요..

그래서 알고보니까 십의 자리랑 일의 자리 일 경우 답이 틀려버려서 한참을 해맸습니다..

 

백준이 이런게 불편한것 같습니다

 

 

[해설 및 풀이]

 

이 문제의 경우는 분해 합이라고 했음으로 각 자리수를 나눠서 그 더한 값이 입력값과 같으면

정답인 아주 심플한 문제지만 이 각자리를 어떤식으로 나누냐에 따라 난이도가 갈릴 수 있는 문제 같습니다.

 

이러한 자리를 못나눈다면 저도 마찬가지지만

 

백의 자리 value / 100

 

십의 자리 value%10/10

 

..등 이런식으로 나눠서 답이 두자리의 경우와 한자리의 경우 답이 안나와서 한참을 해맸습니다.

 

 

여기서 각 자리수를 나눌 수 있는 코드가 있는데요.

 

바로 반복 값을 돌려서 반복값에 %10을 하면됩니다.

 

바로 코드로 보겠습니다.

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;

public class Main {


    static StringBuilder sb;

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int value = Integer.parseInt(st.nextToken());

        int check = check(value);

        System.out.println(check);


    }
    public static int check(int value){


        for(int i=1;i<=value;i++){
            int sum = i;
            int temp = i;
            while (temp > 0){
                sum = sum + temp%10; // 1. 각 자리수를 더함 198이면 8 (1)
                                    //  2. 다시 19가 들어옴 19 %10 = 9 (3)
                                    //  3. 1%10 = 1  , sum = 198 + 8 + 9 + 1 순 진행

                temp = temp/10; // 1. 198 / 10 = 19 (2)
                                // 2. 19 / 10 = 1   (4)
                                // 3. 1 / 10 = 0 while문 종료
            }
            if(sum == value) return i;
        }
        return 0;
    }
}