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;
}
'코딩 테스트 > Project Euler @ kr' 카테고리의 다른 글
34) 각 자릿수의 팩토리얼을 더했을 때 자기 자신이 되는 수들의 합은? (0) | 2017.02.20 |
---|---|
33) 이상한 방법으로 약분할 수 있는 분수 찾기 (0) | 2017.02.20 |
31) 영국 화폐 액면가를 조합하는 방법의 수 (0) | 2017.02.20 |
30) 각 자리 숫자를 5제곱해서 더했을 때 자기 자신이 되는 수들의 합은? (0) | 2017.02.20 |
29) 2 ≤ a ≤ 100 이고 2 ≤ b ≤ 100인 a, b로 만들 수 있는 ab의 개수 (0) | 2017.02.20 |