https://www.acmicpc.net/problem/2447
nn 배열을 선언한다음 9개의 구간으로 나눈다. 북서, 북, 북동, 서, center, 동, 남서, 남, 남동 이렇게 9개 구간으로 나누어서 들어간다. 그러다 1칸을 보개 될 경우 을 입력한다. 여기서 center는 아예 보지 않는 것으로 *을 입력하지 않는다.
from sys import stdin
input = stdin.readline
def solve(arr, x, y, n):
if n == 1: #1칸을 바라볼때
arr[y][x] = '*'
return
next = n//3
solve(arr, x + (next*0),y + (next*0),next) #북서
solve(arr, x + (next*1),y + (next*0),next) #북
solve(arr, x + (next*2),y + (next*0),next) #북동
solve(arr, x + (next*0),y + (next*1),next) #서
#solve(arr, x + (next*1),y + (next*1),next)#center
solve(arr, x + (next*2),y + (next*1),next) #동
solve(arr, x + (next*0),y + (next*2),next) #남서
solve(arr, x + (next*1),y + (next*2),next) #남
solve(arr, x + (next*2),y + (next*2),next) #남동
N = int(input())
# 출력 결과의 틀을 만들어둔다.
arr = [[' ' for _ in range(N)] for _ in range(N)]
solve(arr, 0,0,N)
for i in arr:
for j in i:
print(j, end='')
print()