본문 바로가기

코딩 테스트/Project Euler @ kr

32) 1~9 팬디지털 곱셈식을 만들 수 있는 모든 수의 합

반응형

http://euler.synap.co.kr/prob_detail.php?id=32


Skillist 설명---------------------------------------------------------------------------------


public static void main(String[] args){

HashSet<Integer> duplicate = new HashSet<Integer>();

int sum = 0;

for(int i=1;i<100;i++){    //1자리 * 4자리 = 4자리, 2자리 *3자리 = 4자리

for(int j=100;j<10000;j++){

if( check(i) + check(j) + check(i*j) == 987654321){

if(duplicate.add(i*j))}    //중복 체크

sum+= i*j;

}

}

}

}

System.out.println(sum);

}

public static int check(int su){

int sum = 0;

while(su!=0){

switch(su%10){

case 9:

sum+=900000000;

break;

case 8:

sum+=80000000;

break;

case 7:

sum+=7000000;

break;

case 6:

sum+=600000;

break;

case 5:

sum+=50000;

break;

case 4:

sum+=4000;

break;

case 3:

sum+=300;

break;

case 2:

sum+=20;

break;

case 1:

sum+=1;

break;

case 0:

sum+=1000000000;

break;

}

su/=10;

}

return sum;

}


다시 공부--------------------------


static HashSet<Integer> value = new HashSet<Integer>();

static HashSet<Integer> totalsum = new HashSet<Integer>();

public static void main(String[] arg){

int sum = 0;

for(int i=1;i<100;i++){

for(int j=100;j<10000;j++){

value.clear();

if(cal(i) && cal(j) && cal(i*j) && value.size()==9){

if(totalsum.add(i*j)){

sum+=(i*j);

}

}

}

}

System.out.println(sum);

}

static boolean cal(int now){

int temp = now;

while(temp>0){

if(temp%10==0 || value.contains(temp%10)){

return false;

}else{

value.add(temp%10);

temp/=10;

}

}

return true;

}

반응형