https://www.acmicpc.net/problem/2447
주어진 형식대로 재귀를 사용하여 별찍기를 하는 문제이다.
바로 재귀를 사용해서 print를 하기에는 어려울 것 같다는 생각이 들었다.
3의 제곱으로 이루어진 패턴임으로 서서히 27 -> 9 -> 3 으로 범위를 줄여서 패턴화시키는 문제인데 저장이 아닌 프린트 형식이라 좀 어려울 것 같다는 생각이 들었다. 그래서 배열을 따로 만들어서 정보를 다 고쳐놓고 나중에 한번에 프린트를 하는 방식을 사용하기로 하였다.
정보를 저장할 빈 배열 arr을 사용하여 n이 3이 되었을때 3x3패턴의 정사각형 모양을 arr배열에 기록해주었다.
만약 n이 3 이상이라면 계속 재귀문을 호출하도록 하였다.
n = int(input())
arr = [[" "]*n for i in range(n)]
def is_possible(x, y):
return 0 <= x < n and 0 <= y < n
def recursion(x, y, n):
if n <= 3:
for i in range(3):
for j in range(3):
if i==1 and j==1:
continue
arr[x+i][y+j] = "*"
return
else:
for i in range(x, x+n, n//3):
for j in range(y, y+n, n//3):
if i == x+n//3 and j == y+n//3:
continue
else:
if is_possible(x, y):
recursion(i, j, n//3)
recursion(0, 0, n)
for i in range(n):
print("".join(arr[i]))