오일러 프로젝트의 18번과 67번 문제다.

3
7 5
2 4 6
8 5 9 3

위와 같은 숫자로 된 피라미드가 있다. 가장 위쪽에서 가장 아래까지 한칸씩 움직이면서 내려온다. 그리고, 내려오면서 그 경로에 있는 숫자를 모두 더한다. 위에 빨간색으로 표시된 길은 그 합이 최대가 되는 경로에 해당한다.

문제. 다음 숫자 피라미드의 꼭대기에서 밑바닥까지 내려갈 때, 합이 최대가 되는 경로를 지난다고 하면, 그 합의 값은 얼마인가?
75
95 64
17 47 82
18 35 87 10
20 04 82 47 65
19 01 23 75 03 34
88 02 77 73 07 63 67
99 65 04 28 06 16 70 92
41 41 26 56 83 40 80 70 33
41 48 72 33 47 32 37 16 94 29
53 71 44 65 25 43 91 52 97 51 14
70 11 33 28 77 73 17 78 39 68 17 57
91 71 52 38 17 14 91 43 58 50 27 29 48
63 66 04 68 89 53 67 30 73 16 69 87 40 31
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23

해설에 의하면, 위의 피라미드는 겨우 16단이고, 따라서 가능한 경우가 16384가지밖에 없다. 따라서 모든 경로를 모두 테스트 하는 것이 가능하다. 그런데, 67번 문제는 좀 더 막장이다.
이건 100줄짜리인데, 2의 100제곱 만큼의 경로가 있다. 이걸 모든 경로를 다 해본다는 것은 사실상 불가능하다. -_-;

즉, 그보다 좀 더 똑똑한 방법을 생각해야 한다.

물론 난 두 문제 모두 알고리즘으로 풀었으므로 이 해설을 쓸 수 있는 거다. 알고리즘만 잘 짜면 펜티엄3 800MHz로도 0.1초만에 답이 나오게 할 수 있다.

힌트
1. 이 문제는 해결한 사람이 매우 많다. 이것은 굉장한 힌트가 된다.
2. 모든 경로를 다 해보는 것은 불가능하다는 사실을 이미 알려주고 있다. 이것으로부터도 많은 것을 깨달을 수 있다.



아무튼, 한번에 2문제를 풀었으니 된거다.
by snowall 2008. 10. 22. 23:44