[Project Euler] Problem 28

원문: Problem 28
Starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral is formed as follows:

21 22 23 24 25
20  7  8  9 10
19  6  1  2 11
18  5  4  3 12
17 16 15 14 13

It can be verified that the sum of the numbers on the diagonals is 101.

What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed in the same way?

숫자 1부터 시작해서 시계 방향으로 오른쪽까지 움직이는 5 * 5의 나선이 다음과 같이 형성되어 있다:

21 22 23 24 25
20  7  8  9 10
19  6  1  2 11
18  5  4  3 12
17 16 15 14 13

대각선 위에 있는 숫자들의 합이 101이라는 것이 증명될 수 있다.

같은 방법으로 생성된 1001 * 1001의 나선에서 대각선 위에 있는 숫자들의 합은 무엇인가?

문제를 딱 봤을 때는 배열에 집어 넣어서 풀어야 할 것 같았다. 그러나 다시 보니, 그냥 수학을 이용해서 간단히 풀 수 있다.

Python
# 콘솔의 인터프리터에서 작성했다.
>>> sum = 1
>>> for i in range(3, 1002, 2):
...     k = i ** 2 # 오른쪽 상단에 있는 숫자
...     sum += k + (k - (i - 1)) + (k - 2 * (i - 1)) + (k - 3 * (i - 1)) # 오른쪽 상단부터 반시계 방향으로 있는 숫자들
... 
>>> print(sum)
접기

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스