
다음과 같이 n x n 크기의 격자에 1부터 n x n까지의 수가 하나씩 있습니다.

이때 수가 다음과 같은 순서로 배치되어있다면 이것을 n-소용돌이 수라고 부릅니다.

소용돌이 수에서 1행 1열부터 n 행 n 열까지 대각선상에 존재하는 수들의 합을 구해야 합니다.

위의 예에서 대각선상에 존재하는 수의 합은 15입니다.
격자의 크기 n이 주어질 때 n-소용돌이 수의 대각선상에 존재하는 수들의 합을 return 하도록 solution 함수를 완성해주세요.
격자의 크기 n이 solution 함수의 매개변수로 주어집니다.
n-소용돌이 수의 대각선상에 존재하는 수들의 합을 return 해주세요.
| n | return |
|---|---|
| 3 | 15 |
| 2 | 4 |
예시 #1
문제의 예와 같습니다.
예시 #2

1과 3을 더하여 4가 됩니다.
#You may use import as below.
#import math
def solution(n):
# Write code here.
answer = 0
return answer
#The following is code to output testcase.
n1 = 3
ret1 = solution(n1)
#Press Run button to receive output.
print("Solution: return value of the function is", ret1, ".")
n2 = 2
ret2 = solution(n2)
#Press Run button to receive output.
print("Solution: return value of the function is", ret2, ".")
이번에도
빈칸 채우기문제가 아니라 함수 전체를 작성하는 문제이다.
#You may use import as below.
#import math
def solution(n):
# Write code here.
answer = 0
matrix = [[0 for _ in range(n)] for _ in range(n)]
i, j = 0, 0
value = 1
state = "right"
while matrix[i][j] == 0:
matrix[i][j] = value
value += 1
if state == "right":
if j + 1 < n and matrix[i][j+1] == 0:
j += 1
elif j + 1 >= n or matrix[i][j+1] > 0:
i += 1
state = "down"
elif state == "down":
if i + 1 < n and matrix[i+1][j] == 0:
i += 1
elif i + 1 >= n or matrix[i+1][j] > 0:
j -= 1
state = "left"
elif state == "left":
if j - 1 >= 0 and matrix[i][j-1] == 0:
j -= 1
elif j - 1 >= 0 or matrix[i][j-1] > 0:
i -= 1
state = "up"
elif state == "up":
if i - 1 >= 0 and matrix[i-1][j] == 0:
i -= 1
elif i - 1 >= 0 or matrix[i-1][j] == 0:
j += 1
state = "right"
for i in range(n):
answer += matrix[i][i]
return answer
#The following is code to output testcase.
n1 = 3
ret1 = solution(n1)
#Press Run button to receive output.
print("Solution: return value of the function is", ret1, ".")
n2 = 2
ret2 = solution(n2)
#Press Run button to receive output.
print("Solution: return value of the function is", ret2, ".")
#You may use import as below.
#import math
def solution(n):
# Write code here.
answer = 0
pane = [[0] * n for _ in range(n)] # 1. 2차원 리스트를 초기화
# 2. 소용돌이 방향으로 움직이기 위한 좌표 변화 규칙을 리스트로 설정
di = [0, 1, 0, -1]
dj = [1, 0, -1, 0]
ci, cj = 0, 0 # 3. 현재 위치를 (0,0) 으로 설정
num = 1 # 4. 숫자를 1부터 입력
k = 0 # 5. 좌표 변화 규칙 리스트의 인덱스 초기화
# 6. 좌표가 범위 안에 있고 현재 위치의 값이 0인 동안 반복
while 0 <= ci < n and 0 <= cj <n and pane[ci][cj] == 0:
pane[ci][cj] = num
num += 1
# 7. 소용돌이 변화 규칙[k]에 맞게 위치를 바꾸면서 숫자 값을 1씩 증가하며 입력.
next_i = ci + di[k]
next_j = cj + dj[k]
#8.(다음 입력 좌표가 범위를 벗어났거나) or (다음 위치의 값이 0이 아닌 경우) : 방향 바꿈
if next_i == -1 or next_i == n or next_j == -1 or next_j == n or pane[next_i][next_j] > 0:
k = (k + 1) % 4
ci += di[k]
cj += dj[k]
for i in range(n):
answer += pane[i][i]
return answer
#The following is code to output testcase.
n1 = 3
ret1 = solution(n1)
#Press Run button to receive output.
print("Solution: return value of the function is", ret1, ".")
n2 = 2
ret2 = solution(n2)
#Press Run button to receive output.
print("Solution: return value of the function is", ret2, ".")
