Script / CSS

G1sUtil.js

G1sBlogger.js

G1sNavigationList.js

G1sCode

Posts List


2012년 2월 20일 월요일

[Project Euler] 11. 20×20 격자에서 연속된 네 숫자의 곱 중 최대값

11. 20×20 격자에서 연속된 네 숫자의 곱 중 최대값
아래와 같은 20×20 격자가 있습니다.

08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48

위에서 대각선 방향으로 연속된 붉은 숫자 네 개의 곱은 26 × 63 × 78 × 14 = 1788696 입니다.

그러면 수평, 수직, 또는 대각선 방향으로 연속된 숫자 네 개의 곱 중 최대값은 얼마입니까?

Click

string로 받은 문자를 정해진 크기에 따라 잘라서 배열에 넣고 배열을 돌며 문제 해결.
처음에 대각선을 할때 왜 우측으로 올라가는 대각선을 생각을 안했는지....
<script>
function multyplyAdjoinNumber(nums, x, y, k, dirX, dirY){
 var multyply = 1;
 for(var i=0; i<k; i++) {
  var temp = nums[x+i*dirX][y+i*dirY];
  multyply *= temp;  
 }
 return multyply;
}

function maxMultiplyAdjoinNumber(n, m, k, nums){
 //배열 선언. 배열의 크기는 n X m.
 var array = new Array();
 for(var i=0;i<m;i++)
 array[i] = new Array();
  
 //값을 배열에 넣으며 i,j가 k 보다 클때 이전에 입력 된 배열의 값들과 곱한 값을 구함.
 var max = 0;
 for(var i=0; i<n; i++) {
  for(var j=0; j<m; j++) {
  var temp = parseInt(nums.substr((i*n+j)*3,1))*10+ parseInt(nums.substr((i*n+j)*3+1,1));
  array[i][j] = temp;
  if (i >= k - 1 && j >= k - 1) {
   max = maxNumber(max, multyplyAdjoinNumber(array, i, j, k, -1, -1));
   max = maxNumber(max, multyplyAdjoinNumber(array, i-3, j, k, 1, -1));
  }
  if(i>=k-1)
   max = maxNumber(max,multyplyAdjoinNumber(array,i,j,k,-1,0));
  if(j>=k-1)
   max = maxNumber(max,multyplyAdjoinNumber(array,i,j,k,0,-1));
  }
 }
 return max;
}
</script>

댓글 없음:

댓글 쓰기