알고리즘 문제풀이

백준 20164 홀수홀릭호석

y00ns00 2021. 6. 28. 23:41

 

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

public class 홀수홀릭호석 {

    static int cnt;
    static int max = 0;
    static int min = Integer.MAX_VALUE;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String n = br.readLine();


        cnt = 0;

        recursive(n,0);
        System.out.println(min+" "+max);


    }

    public static void recursive(String n,int cnt){
        char num[] = n.toCharArray();

        //홀수 개수 카운트
        for(int i = 0 ; i < num.length; i++){
            if(Character.getNumericValue(num[i]) %2 != 0){
                cnt++;
            }
        }

        if(num.length >= 3){
            for(int i = 0; i < num.length-2; i++){
                for(int j = i+1 ; j < num.length-1; j++){
                    int sum = sum(i,j,num);
                    recursive(Integer.toString(sum),cnt);
                }
            }
        }else if(num.length >= 2){
            for(int i = 0 ; i < num.length-1;i++){
                int sum = sum(i,num);
                recursive(Integer.toString(sum),cnt);
            }

        }else{
            max = Math.max(max,cnt);
            min = Math.min(min,cnt);

        }


    }

    public static int sum(int left,char num[]){

        StringBuilder leftSum = new StringBuilder();
        StringBuilder midSum = new StringBuilder();

        for(int i = 0; i < num.length; i++){

            if(i <=left){
                leftSum.append(num[i]);
            }else if ( i > left){
                midSum.append(num[i]);
            }

        }

        int sum = Integer.parseInt(leftSum.toString())+Integer.parseInt(midSum.toString());

        return sum;
    }


    public static int sum(int left,int mid,char num[]){

        StringBuilder leftSum = new StringBuilder();
        StringBuilder midSum = new StringBuilder();
        StringBuilder rightSum =new StringBuilder();

        for(int i = 0; i < num.length; i++){

            if(i <=left){
                leftSum.append(num[i]);
            }else if ( i <= mid){
                midSum.append(num[i]);
            }else if ( i > mid ){
                rightSum.append(num[i]);
            }

        }
        int sum = Integer.parseInt(leftSum.toString())+Integer.parseInt(midSum.toString())+Integer.parseInt(rightSum.toString());

        return sum;
    }




}