백준 20164 - 홀수 홀릭 호석

Updated:

Java

20164 번 - 홀수 홀릭 호석

문제

접근 방법

주어진 문자열을 String.subString을 사용하여 3갈래로 자른다. 반복문을 이용하여 자를 수 있는 모든 경우로 자르고, 재귀함수로 자르고 더한 수를 다시 탐색한다.

수가 1자리 수가 될 때마다 그 경우의 홀수의 수의 최대, 최소를 갱신한다.

코드

import java.util.*;
import java.io.*;

public class Main {
	static int result_Max, result_Min = Integer.MAX_VALUE;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	String num = br.readLine();

    	split(num, 0);

    	System.out.print(result_Min + " " + result_Max);

    	br.close();
	}

	private static void split(String num, int cnt) {
		// 현재 수의 홀수의 개수를 센다
		cnt += countOdd(num);

		int len = num.length();
		int sum;
		if(len == 1) {
			result_Max = Math.max(result_Max, cnt);
			result_Min = Math.min(result_Min, cnt);
		}
		else if(len == 2){
			sum = num.charAt(0) - '0' + num.charAt(1) - '0';
			split(Integer.toString(sum), cnt);
		}
		// 3갈래로 잘라서 수를 더한다.
		else {
			for(int i = 1; i < len - 1; i++) {
				for(int j = i + 1; j < len; j++) {
					sum = SumStr(num.substring(0, i), num.substring(i, j), num.substring(j,len));
					split(Integer.toString(sum), cnt);
				}
			}
		}
	}

	private static int SumStr(String str1, String str2, String str3) {
		return Integer.parseInt(str1) + Integer.parseInt(str2) + Integer.parseInt(str3);
	}

	private static int countOdd(String num) {
		int cnt = 0;
		for(int i = 0; i < num.length(); i++) {
			if((num.charAt(i) - '0') % 2 == 1)
				cnt++;
		}
		return cnt;
	}

	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

후기

골드 5였지만 오히려 쉬웠던 문제.

개선할 점