본문 바로가기

오일러프로젝트

[오일러프로젝트] 11번문제


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

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


헐.~~ 했던 문제..
이게 수학적 공식과 알고리즘만을 요구하는 프로젝트가 아니었구나... 라고 느낌..


Python
파이썬은 혼자 이리저리 짱구 굴려서 풀었던 코드인데.. 가로/세로/왼격자/오른격자를 차례로 돌면서 계산하도록 하였다.
근데 다른 사람이 루비로 더 깔끔하게 풀어낸 것이 있어서 루비는 그 코드를 실어봄..
물론 파이썬으로도 적용 가능...

나는 왜 이렇게 어렵게 했을까... 라고 느끼며 ㅋㅋ

Ruby
확실히... 프로그래밍 언어라는 것이..(하이레벨의..) 어느정도는 서로 컨셉을 공통적으로 관통하는 부분이 있기는 하지만 언어가 추구하는 사상이 다르다보니 문제를 해결하기 위해 접근하는 방법과 생각도 바뀌어야 하는구나... 루비와 파이썬을 같이 공부하기 참 어렵다는 이야기 --;

Perl 다른분의 루비코드 로직을 보고 그대로 구현하였는데 perl은 이차원배열이라는 것이 없어서 hash와 array를 사용하여 이차원 배열 구현. 다만 여기서 @temp 배열을 %a hash에 넣을 때 처음에 $a{$key}=@temp로 했더니 문맥에 의해서 hash에 @temp 배열의 길이가 들어간다. 이것 때문에 한참 고생하다가 결국 배열을 []을 싸줘서 목록문맥으로 만들어주니 정상적으로 실행됨... 이런 경험을 해볼려고 오일러 프로젝트를 하는거지...ㅋ