아래와 같은 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; }
'공부' 카테고리의 다른 글
| 최소공배수(lcm), 최대공약수(gcd) (0) | 2018.03.13 |
|---|---|
| Dynamic Programming (0) | 2017.09.14 |
| (오일러 10번) 이백만 이하 소수의 합 (0) | 2017.09.06 |
| (오일러 9번) a + b + c = 1000 이 되는 피타고라스 수 (0) | 2017.09.06 |
| (오일러 8번) 1000자리 숫자 안에서 이어지는 5자리 숫자의 곱 중 최대값은? (0) | 2017.09.06 |
댓글