알고리즘/백준

백준 2447: 별 찍기 - 10 (Python)

sssbin 2021. 9. 8. 12:10

https://www.acmicpc.net/problem/2447

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

 

def star(s):
    list = []
    num = len(s)

    for i in range(3 * num):
        if i // num == 1:
            list.append(s[i % num] + ' ' * num + s[i % num])
        else:
            list.append(s[i % num] * 3)

    return list


n = int(input())
s = ['***', '* *', '***']
k = 0

while n != 3:
    n //= 3
    k += 1

for i in range(k):
    s = star(s)

for i in s:
    print(i)

 

이해하는데 시간이 오래 걸렸던 문제..!

 

3의 패턴일 경우

***

* *

***

--> 거듭제곱할 수록 가운데를 비우고 n/3의 패턴으로 둘러싸임

 

따라서 먼저 n이 3이 될 때까지 몇 번 나누는지 계산하여 그 횟수만큼 별 만드는 함수를 실행한다

우선 처음에 n=3일 때의 배열['***', '* *', '***']을 만들어놓고 

함수를 실행할 때마다 3의 패턴 -> 9의 패턴 -> 27의 패턴 -> ~~ 이 만들어진다

함수(star) 안의 for문에서 i//num==1인 경우는 가운데를 비우는 경우!