본문 바로가기
공부

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

by 하프상 2017. 9. 12.

아래와 같은 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 입니다.

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











# C #include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int cal(int arr[20][20]) // 가로 { int i,j; int cal_res=0; int cal_max=0; for(i=0; i<17; i++) { for(j=0; j<17; j++) { cal_res = arr[i][j] * arr[i][j+1] * arr[i][j+2] * arr[i][j+3]; if(cal_max<cal_res) { cal_max=cal_res; } } } return cal_max; } int cal2(int arr[20][20]) // 세 로 { int i,j; int cal_res=0; int cal_max=0; for(i=0; i<17; i++) { for(j=0; j<17; j++) { cal_res = arr[i][j] * arr[i+1][j] * arr[i+2][j] * arr[i+3][j]; if(cal_max<cal_res) { cal_max=cal_res; } } } return cal_max; } int cal3(int arr[20][20]) // 오른쪽 대각선 { int i,j; int cal_res=0; int cal_max=0; for(i=0; i<17; i++) { for(j=0; j<17; j++) { cal_res = arr[i][j] * arr[i+1][j+1] * arr[i+2][j+2] * arr[i+3][j+3]; if(cal_max<cal_res) { cal_max=cal_res; } } } return cal_max; } int cal4(int arr[20][20]) // 왼쪽 대각선 { int i,j; int cal_res=0; int cal_max=0; for(i=0; i<17; i++) { for(j=0; j<17; j++) { cal_res = arr[i][j+3] * arr[i+1][j+2] * arr[i+2][j+1] * arr[i+3][j]; if(cal_max<cal_res) { cal_max=cal_res; } } } return cal_max; } int main(int argc, char *argv[]) { int arr[20][20] = { {8,2,22,97,38,15,00,40,00,75,04,05,07,78,52,12,50,77,91,8}, {49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,04,56,62,0}, {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,8,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,9,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,9,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,8,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,8,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} }; int res[4] = {0}; int max=0; int i=0; res[0] = cal(arr); res[1] = cal2(arr); res[2] = cal3(arr); res[3] = cal4(arr); for(i=0; i<4; i++) { if(max<res[i]) { max=res[i]; } } printf("%d", max); return 0; }

댓글