프로젝트 오일러 028

나선모양 행렬의 대각선 원소의 합

프로젝트 오일러 028
Photo by ÉMILE SÉGUIN ✳️✳️✳️ / Unsplash

문제

28번 문제
1001×1001 나선모양 행렬에서 대각선 원소의 합은?

쉬움주의

솔직히 이 문제는 1번만큼이나 쉬운 문제인데 왜 28번 타이틀을 달고 있는지는 알기 어렵습니다.

1부터 시작해서 나선을 따라 어떻게 움직이는지 관찰해보면 다음과 같은 규칙을 발견할 수 있습니다.

  1. 방향을 두 번 바꾸고 이동할 때마다 대각선 원소(빨간색)에 도착합니다.
  2. 대각선 원소에 네 번 도착한 후에는 이동하는 거리가 2씩 더 늘어납니다.
  3. 한 변의 길이가 1,001이 되기 위해서는 500바퀴를 돌면 됩니다.

이상의 규칙을 적용하여 다음과 같이 계산하면 됩니다.

a, s, k = 1, 1, 2
for _ in range(500):
    for _ in range(4):
        a += k
        s += a
    k += 2

print(s)