티스토리 뷰
아래와 같은 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 입니다.
그러면 수평, 수직, 또는 대각선 방향으로 연속된 숫자 네 개의 곱 중 최대값은 얼마입니까?
#include <stdio.h>
int result1 ( int arr[20][20]){ //오른쪽아래로의 대각선 계산
int result = 0;
int temp = 0;
int n, m;
for(n=0;n<17; n++) {
for(m=0;m<17;m++){
temp = arr[n][m]*arr[n+1][m+1]*arr[n+2][m+2]*arr[n+3][m+3];
if(result < temp)
result = temp;
}
}
return result;
}
int result2 (int arr[20][20]){ //수직으로의 계산
int result = 0;
int temp = 0;
int n, m;
for(n=0;n<17;n++){
for(m=0;m<20;m++){
temp = arr[n][m]*arr[n+1][m]*arr[n+2][m]*arr[n+3][m];
if(result < temp)
result = temp;
}
}
return result;
}
int result3 (int arr[20][20]){ //수평으로의 계산
int result = 0;
int temp = 0;
int n, m;
for(n=0;n<20;n++){
for(m=0;m<17;m++){
temp = arr[n][m]*arr[n][m+1]*arr[n][m+2]*arr[n][m+3];
if(result < temp)
result = temp;
}
}
return result;
}
int result4 (int arr[20][20]){ //왼쪽아래로의 대각선 계산
int result = 0;
int temp = 0;
int n, m;
for(n=0;n<17;n++){
for(m=0;m<17;m++){
temp = arr[n][m+3]*arr[n+1][m+2]*arr[n+2][m+1]*arr[n+3][m];
if(result < temp)
result = temp;
}
}
return result;
}
int main (void){
int arr[20][20] = {
{8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8},
{49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0},
{81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65},
{52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 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, 3, 45, 2, 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, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21},
{24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72},
{21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95},
{78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92},
{16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57},
{86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58},
{19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40},
{4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66},
{88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69},
{4, 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, 4, 36, 16},
{20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54},
{1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48}
};
int i;
int max=0;
int num[4]={0,};
num[0]=result1(arr);num[1]=result2(arr);
num[2]=result3(arr);num[3]=result4(arr);
for(i=0; i<4; i++){
if(num[i] > max)
max = num[i];
}
printf("%d\n", max);
return 0;
}
'알고리즘 > 오일러 프로젝트' 카테고리의 다른 글
오일러 프로젝트 14번 (0) | 2016.05.02 |
---|---|
오일러 프로젝트 12번 (0) | 2016.04.23 |
오일러 프로젝트 10번 (0) | 2016.04.22 |
오일러 프로젝트 8번 (0) | 2016.04.17 |
오일러 프로젝트 7번 (0) | 2016.04.17 |
- Total
- Today
- Yesterday
- 이미지게임
- 실행 압축
- 패킷
- 오일러 프로젝트 10본
- 화투이미지맞추기
- arp
- MFC
- tipsoft
- 허프만 알고리즘
- 오일러 프로젝트 11번
- 비손실 압축
- TIPS강좌
- tipsr강좌
- Tips
- 오일러 프로젝트 8번
- 오일러 프로젝트 16번
- 오일러 프로젝트 13
- CBrush
- 오일러 프로젝트 14번
- 헤더
- 팁스강좌
- 와이어샤크
- 약수 500개
- 오일러
- 오일러 프로젝트 12번
- 서버
- 키보드 메시지 이벤트
- 2의 1000승
- tipssoft
- Omok
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |