[Python][백준] 2447번 별 찍기 - 10

신남·2023년 2월 10일

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))

0개의 댓글