백준 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였지만 오히려 쉬웠던 문제.