Project Euler

프로젝트 오일러 028

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

1분
#project euler #python

나선 모양행렬의 패턴찾기

문제에서 제시한 나선행렬의 그림을 보고 작은 수부터 따라서 움직여보면 다음과 같은 패턴을 발견할 수 있습니다.

  1. 위, 오른쪽, 아래쪽, 왼쪽으로 방향을 바꾸며 이동합니다.
  2. 방향을 두 번 바꾸고 이동한 후에는 대각선 위치에 도착하게 됩니다.
  3. 대각선 위치에 네 번 도착하면 (즉 한 바퀴를 돌면) 한 방향으로 이동하는 거리가 2씩 늘어납니다.
  4. 한 변의 길이가 1,001이 되기 위해서는 500바퀴를 돌면 됩니다.

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

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

# a: 현재 위치의 숫자 
# s: 대각선에 위치한 원소의 합
# k: 한 변을 따라 움직이는 거리
a, s, k = 1, 1, 2
for _ in range(500):
    for _ in range(4):
        a += k
        s += a
    k += 2

print(s)