https://www.acmicpc.net/problem/1913
내림차순으로 (N^2 ~ 1) 숫자 리스트를 생성해주고(nums), 들어갈 배열 순서를 (x, y) 좌표값 형태로 result 리스트에 저장해주었다.
정가운데 좌표에서부터 시계 반대 순서로 돌아가며 숫자를 채워주는 형식이다.
하지만 본인은 큰 둘레(겉 정사각형)부분부터 돌아가며 숫자를 넣어주는 형태로 코드를 짰다.
위의 순서로 배열 위치 = 해당 숫자가 들어갈 수 있도록
nums = [9, 8, 7, 6, 5, 4, 3, 2] #1은 따로 지정했으므로 뺌
result = [ (0,0), (1,0), (2,0), (2,1), (2,2), (1,2), (0,2), (0,1), (1,1) ]enumerate를 이용해서 result의 index --> nums[index]
순서대로 for문을 돌려 거꾸로 배열에 맞는 숫자를 삽입해준다.
N = int(input())
find_num = int(input())
deep = N // 2
snail = [[0]*N for _ in range(N)]
nums = [x for x in range(N**2, 0, -1)]
snail[N//2][N//2] = 1 # 정가운데 좌표값은 무조건 1
result = []
for k in range(deep):
for i in range(k, N-k):
result.append((i, k))
for i in range(k+1, N-k):
result.append((N-k-1, i))
for i in range(N-k-2, k-1, -1):
result.append((i, N-k-1))
for i in range(N-k-2, k, -1):
result.append((k, i))
for x, y in enumerate(result):
snail[y[0]][y[1]] = nums[x]
if nums[x] == find_num:
find_xy = (y[0]+1, y[1]+1)
if find_num == 1: find_xy = (N//2+1, N//2+1)
for x in snail:
print(*x, sep=' ')
print(*find_xy)
# someone's code
n = int(input())
m = int(input())
board = [[0 for _ in range(n)] for _ in range(n)]
dr = [0, 1, 0, -1] # 오른쪽, 아래쪽, 왼쪽, 위쪽 순서
dc = [1, 0, -1, 0]
r = n//2 # 시작 row
c = n//2 # 시작 column
num = 1 # 해당 위치에 들어갈 숫자 1씩 증가 예정
len = 0 # 특정 방향으로 이동할 길이 얼마나 더할 것인가. for 문으로 동일 작업 수행 가능.
board[r][c] = num
while True:
for i in range(4):
for _ in range(len): # 특정 방향으로 한칸씩 이동하며 숫자 입력
r+=dr[i]
c+=dc[i]
num+=1
board[r][c]=num
if num==m: # 찾을 번호의 인덱스 저장
ans = [r+1, c+1]
if r==c==0:
break
r -= 1
c -= 1
len += 2
for i in range(n):
print(*board[i])
print(*ans)