자바의 정석 네이버 카페에서 나온 문제중 하나
초등학교 3학년 문제라는데 ~~
0,1,2,3,4,5,6,7 값을 가지고 4자리씩 2개의 값을 만들어 각 값의 차를 구해서 가장 적은 차이인 값은?
풀이)
수학 알고리즘같은건 없고 그냥 순차적으로 반복문으로 처리함
반복문으로 중복되지 않은 최소 01234567 값 부터 최대값 76543210까지 반복하면서
8과 9가 나올경우 에는 값에서 제외 해버리고
또한 해당 값에서 숫자가 중복될 경우에도 제외
예) 76543200 일경우에도 제외
그렇게 해서 값을 구한다.
답은
4012 - 3765
찾은 최소 값은 : 247
JAVA소스이다.
public class cho3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 두수의 차이가 가장 작은 차이가 생기도록 네자리 정수 만들어 차이를 구하시오
// 이용할 수 있는 숫자 0,1,2,3,4,5,6,7
int rand_number = 76543210;
String rand_check;
String rand_check2;
int num1;
int num2;
int min_num = 76543210;
String TempNum1;
String TempNum2;
for (int i = 01234567; i<=rand_number; i++)
{
rand_check2 = ""+i;
rand_check = fillZero(rand_check2, 8);
if (BiCheck(rand_check) == false) continue;
TempNum1 = rand_check.substring(0,4);
TempNum2 = rand_check.substring(4,8);
num1 = Integer.parseInt(TempNum1);
num2 = Integer.parseInt(TempNum2);
if (min_num > num1-num2 && num1-num2 > 0)
{
min_num = num1-num2;
System.out.println(TempNum1 + " - " + TempNum2);
}
}
System.out.println("찾은 최소 값은 : " + min_num);
}
private static boolean BiCheck(String i) {
// TODO Auto-generated method stub
String tmp = i;
String check_tmp;
String tmp1;
// System.out.println("BiCheck : " + tmp);
for (int x=0; x < tmp.length() ; x++)
{
check_tmp = tmp.substring(x,x+1);
if (check_tmp.equals("8") || check_tmp.equals("9") ) return false;
for (int y=0; y<tmp.length(); y++)
{
if (x == y) continue;
tmp1 = tmp.substring(y,y+1);
if (check_tmp.equals(tmp1))
return false;
}
}
return true;
}
private static String fillZero(String randCheck, int i) {
// TODO Auto-generated method stub
int len;
String Temp="";
String Ret="";
len = randCheck.length();
for (int d = 0 ; d < i - len ; d++)
{
Temp = Ret;
Ret = Temp + "0";
}
Temp = Ret;
Ret = Temp + randCheck;
return Ret;
}
}