https://www.acmicpc.net/problem/2447
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인 경우는 가운데를 비우는 경우!
'알고리즘 > 백준' 카테고리의 다른 글
백준 2798: 블랙잭 (Python) (0) | 2021.09.08 |
---|---|
백준 11729: 하노이 탑 이동 순서 (Python) (0) | 2021.09.08 |
백준 10870: 피보나치 수 5 (Python) (0) | 2021.09.06 |
백준 10872: 팩토리얼 (Python) (0) | 2021.09.04 |
백준 1002: 터렛 (Python) (0) | 2021.09.02 |