크기가 무한인 정사각형 모눈종이가 있다. 모눈종이의 각 정사각형은 행과 열의 쌍으로 표현할 수 있다.
이 모눈종이 전체를 양의 정수의 소용돌이 모양으로 채울 것이다. 일단 숫자 1을 0행 0열에 쓴다. 그리고 나서 0행 1열에 숫자 2를 쓴다. 거기서 부터 소용돌이는 반시계 방향으로 시작된다. 다음 숫자는 다음과 같이 채우면 된다.
-3 -2 -1 0 1 2 3
--------------------
-3 |37 36 35 34 33 32 31
-2 |38 17 16 15 14 13 30
-1 |39 18 5 4 3 12 29
0 |40 19 6 1 2 11 28
1 |41 20 7 8 9 10 27
2 |42 21 22 23 24 25 26
3 |43 44 45 46 47 48 49
이 문제는 위와 같이 채운 것을 예쁘게 출력하면 된다. r1, c1, r2, c2가 입력으로 주어진다. r1, c1은 가장 왼쪽 위 칸이고, r2, c2는 가장 오른쪽 아래 칸이다.
예쁘게 출력한다는 것은 다음과 같이 출력하는 것이다.
첫째 줄에 네 정수 r1, c1, r2, c2가 주어진다.
r2 - r1 + 1개의 줄에 소용돌이를 예쁘게 출력한다
-3 -3 2 0
37 36 35 34
38 17 16 15
39 18 5 4
40 19 6 1
41 20 7 8
42 21 22 23
-2 2 0 3
13 30
12 29
11 28
-1 -2 -1 1
18 5 4 3
0 0 0 0
1
규칙
출력
import sys
ans_minus = []
ans_plus = []
a = 4
for i in range(5002):
if i == 0:
ans_minus.append(1)
ans_plus.append(1)
elif i == 1:
ans_minus.append(5)
ans_plus.append(2)
else:
a += 8
ans_minus.append(ans_minus[-1] + a)
ans_plus.append(ans_plus[-1] + a - 4)
r1, c1, r2, c2 = map(int, sys.stdin.readline().split())
x = abs(r1 - r2) + 1
y = abs(c1 - c2) + 1
hurricane = [[0] * y for _ in range(x)]
for i in range(x):
for j in range(y):
real_x = i + r1
real_y = j + c1
if abs(real_x) > abs(real_y):
if real_x < 0:
hurricane[i][j] = ans_minus[abs(real_x)] - abs(real_x - real_y)
elif real_x > 0:
hurricane[i][j] = ans_plus[abs(real_x) + 1] - abs(real_x - real_y) -1
elif abs(real_x) < abs(real_y):
if real_y > 0:
hurricane[i][j] = ans_plus[abs(real_y)] + abs(real_x - real_y) -1
elif real_y < 0:
hurricane[i][j] = ans_minus[abs(real_y)] + abs(real_x - real_y)
elif abs(real_x) == abs(real_y):
if real_x < 0:
hurricane[i][j] = ans_minus[abs(real_x)] - abs(real_x - real_y)
elif real_x > 0:
hurricane[i][j] = ans_plus[abs(real_x) + 1] - abs(real_x - real_y) - 1
if hurricane[i][j] == 0:
hurricane[i][j] = 1
max_num = 0
for i in range(x):
max_hurricane = max(hurricane[i])
max_num = max(max_hurricane, max_num)
max_num_len = len(str(max_num))
for i in range(x):
for j in range(y):
a = len(str(hurricane[i][j]))
if a < max_num_len:
b = " " * (max_num_len - a)
b += str(hurricane[i][j])
print(b, end = " ")
else:
print(hurricane[i][j], end = " ")
print()