https://www.acmicpc.net/problem/2447
공부 날짜 : 2023.02.10
정답 참조 여부 : X
프렉탈 구조를 구현하는 문제
* * *
* 0 *
* * *
의 구조를 프렉탈 구조로 구현하는 문제였다.
재귀함수로 풀었는데
다음 깊이로 넘어갈 때 이전 깊이에서 구조를 받아오고 현재 깊이의 크기에 맞는 리스트를 만들어서
받아온 이전 구조로 부터 모양을 그려나갔다.
*은 구조대로 그리고 공백은 그냥 빈칸으로 채웠다.
그러고 입력받은 n에 맞게 3**depth 가 n이 되면 값을 반환하도록 하여 값을 출력했다.
어렵지도 않았고 재귀함수를 다룰줄 알고 프렉탈 구조가 어떻게 그려지는지 이해하면 쉬운 문제였다.
import sys
from copy import deepcopy
input = sys.stdin.readline
n = int(input())
# 깊이를 활용해서 깊이에 맞는 크기를 만든다.
def star(n, depth, arr):
# 전체 크기를 만든다.
new_arr = [[0]*(3**depth) for _ in range(3**depth)]
# 3**depth 가로크기로 지정해도됨. len(arr[i])
for i in range(3**(depth-1)):
for j in range(3**(depth-1)):
for k in range(3):
for l in range(3):
new_arr[i*3+k][j*3+l] = arr[i][j]
new_arr[i*3+1][j*3+1] = ' '
if 3 ** depth == n:
return new_arr
return star(n, depth + 1, deepcopy(new_arr))
base_arr = [["*"]]
answer = star(n, 1, base_arr)
for i in answer:
print("".join(i))