알고리즘/백준
백준 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인 경우는 가운데를 비우는 경우!