n이 입력으로 주어질때 해당하는 프랙탈 패턴을 출력하는 문제이다. 이때 n은 3의 거듭제곱이다.

주어진 패턴을 보면 n = 3일 때의 패턴이 크기가 커지며 반복되고 있다는 것을 알 수 있다. (가운데가 뚫려있는 네모 도넛의 형태?) 9일때는 3의 패턴을 9개 붙여다 놓은 형태이고, 27일때는 9의 패턴을 9개 붙여다 놓은 형태이다.
머리로는 패턴을 이해했는데 재귀함수로의 연상이 어렵다.
재귀 함수로 구현하기 위해서
import sys
def draw_pattern(n):
if n == 3:
pattern = ["***", "* *", "***"]
else:
prev_pattern = draw_pattern(n // 3)
size = n // 3
pattern = []
# 상단부
for r in prev_pattern:
pattern.append(r * 3)
# 중간부 (가운데 공백 포함)
for r in prev_pattern:
pattern.append(r + " " * size + r)
# 하단부
for r in prev_pattern:
pattern.append(r * 3)
return pattern
# n은 3의 거듭제곱
n = int(sys.stdin.readline())
pattern = draw_pattern(n)
for i in pattern:
print(i)