1부터 n까지의 각 숫자를 한번씩만 써서 만들 수 있는 숫자를 팬디지털(pandigital)이라고 합니다.
예를 들면 15234는 1부터 5의 숫자가 한번씩만 쓰였으므로 1 ~ 5 팬디지털입니다.
7254라는 숫자는 그런 면에서 특이한데, 39 × 186 = 7254 라는 곱셈식을 만들 때 이것이 1 ~ 9 팬디지털이 되기 때문입니다.
이런 식으로 a × b = c 가 1 ~ 9 팬디지털이 되는 모든 c의 합은 얼마입니까?
(참고: 어떤 c는 두 개 이상의 (a, b)쌍에 대응될 수도 있는데, 이런 경우는 하나로 칩니다)
예를 들면 15234는 1부터 5의 숫자가 한번씩만 쓰였으므로 1 ~ 5 팬디지털입니다.
7254라는 숫자는 그런 면에서 특이한데, 39 × 186 = 7254 라는 곱셈식을 만들 때 이것이 1 ~ 9 팬디지털이 되기 때문입니다.
이런 식으로 a × b = c 가 1 ~ 9 팬디지털이 되는 모든 c의 합은 얼마입니까?
(참고: 어떤 c는 두 개 이상의 (a, b)쌍에 대응될 수도 있는데, 이런 경우는 하나로 칩니다)
진짜 대충 풀었네요.
사실 요 몇일 나름 바쁜 사정으로 인해 Project Euler 하루 한개씩 올리기로 한 개인 과제를 쉬기로 했습니다. Project Euler를 안하니 블로그 업뎃이 뜸하기도 하고 해서 오랜만에 한문제 풀었는데 좀 귀찮은 문제가 걸렸네요. 머리에서 더 좋은 방법이 떠오르지만 제대로 구현은 안되고 딴 생각만 나고....
<script language="Javascript" type="text/javascript">
function p032_in(){
var n = 9;
var sum = 0;
for(var c=1234; c<=9876; c++){
/* 팬디지털 체크를 위한 변수들 선언. */
var check = true;
var nums = new Array();
for(var i=1; i<=n; i++)
nums[i] = true;
nums[0] = false;
/* c값이 팬디지털에 적용되는지 확인. */
var temp1 = c;
do{
var temp2 = temp1%10;
if(!nums[temp2]){
check = false;
break;
}
nums[temp2] = false;
temp1 = parseInt(temp1/10);
}while(temp1!=0);
if(check){ //c값이 팬디지털를 만족하면 a값 구함.
for(var a=1; a<=98;a++){
check = true;
/* c값에 사용된 숫자 채움. */
for(var i=1; i<=n; i++)
nums[i] = true;
temp1 = c;
do{
var temp2 = temp1%10;
nums[temp2] = false;
temp1 = parseInt(temp1/10);
}while(temp1!=0);
/*a값이 팬디지털을 만족하는지 확인.*/
temp1 = a;
do{
var temp2 = temp1%10;
if(!nums[temp2]){
check = false;
break;
}
nums[temp2] = false;
temp1 = parseInt(temp1/10);
}while(temp1!=0);
if(check){ //a,c값이 모두 팬디지털을 만족한다면 b값을 구함.
check = true;
var b = c / a;
if(b-parseInt(b)!=0){ //c가 a로 딱 나눠떨어지는지 확인.
check = false;
continue;
}
//b값이 팬디지털을 만족하는지 확인.
temp1 = b;
do{
var temp2 = temp1%10;
if(!nums[temp2]){
check = false;
break;
}
nums[temp2] = false;
temp1 = parseInt(temp1/10);
}while(temp1!=0);
if(check){
//모든 수를 사용했는지 확인.
for(var i=1; i<=n; i++){
if(nums[i]){
check = false;
break;
}
}
//최종적으로 팬디지털을 만족한다면 c값을 더해 줌.
if(check)
sum += c;
}
}
if(check)
break;
}
}
}
alert(sum);
}
</script>
댓글 없음:
댓글 쓰기