* Computer Science/Project Euler

project euler 11. problem

soicem 2016. 7. 21. 14:57

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

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


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
def anyMax():
 
    str = "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"
    
    max = 0
    str = str.split(" ")
 
    for i in range(020):
        for j in range(i*20, i*20 + 20):
            print "i : %d / j : %d" % (i, j)
            tmp = 0
 
            if j < 340:
                tmp = int(str[j]) * int(str[j + 20]) * int(str[j + 20 * 2]) * int(str[j+20 * 3])
                print "Vertical : %d" % tmp
                if tmp>max:
                    max = tmp
 
            if j+3 == i*20 + 20:
                break
            else:
                tmp = int(str[j]) * int(str[j+1]) * int(str[j+2]) * int(str[j+3])
                print "Horizontal : %d" % tmp
                if tmp > max:
                    max = tmp
                if j<340:
                    tmp = int(str[j]) * int(str[j+20+1]) * int(str[j+20*2+2]) * int(str[j+20*3+3])
                    print "\ : %d" % tmp
                    if tmp > max:
                        max = tmp
                    tmp = int(str[j+3]) * int(str[j+20+2]) * int(str[j+20*2+1]) * int(str[j+20*3])
                    print "/ : %d" % tmp
                    if tmp > max:
                        max = tmp
 
 
    print "maximum value is %d" % max
 
anyMax()
 
cs



i : 19 / j : 393

Horizontal : 199004

i : 19 / j : 394

Horizontal : 87932

i : 19 / j : 395

Horizontal : 113297

i : 19 / j : 396

Horizontal : 5438256

i : 19 / j : 397

maximum value is 70600674


C:\Users\soicem's com\Desktop>



왜 안되나 했더니 맨마지막 *를 +로 적었었네.  이런 +

'* Computer Science > Project Euler' 카테고리의 다른 글

project euler 13. problem  (0) 2016.07.23
project euler 12. problem  (0) 2016.07.22
project euler 10. problem  (0) 2016.07.20
project euler 9. problem  (0) 2016.07.19
project euler 8. problem  (0) 2016.07.18