두가지 방법으로 풀 수 있다.
처음 생각한 방법은
1. 별을 9개의 공간으로 나누고, 좌 상부터 1이라고 생각해서 5번을 제외한 나머지 공간의 별을 똑같이 복사한다.
풀다보니 이 방법은 시간이 너무 오래걸린다는 것을 알게되었다. 그래서 일단 다 풀고 나서 다른 풀이를 찾아보고 가장 이해하기 쉬우며 괜찮았다고 생각하는 방법이 이 방법이다.
2. 공간을 열 1, 열 2, 열 3 으로 나누어 재귀함수로 구해진 별을 붙이는 방법이다.
좀더 깊게 설명하자면 제일 먼저 재귀를 통해 n이 1까지 도달하게 하여 "*"을 리턴한다.
그 후 stars는 반복문을 돌아서 1열에는 ["***"]이 되고 2열에는 ["* *"] 3열은 ["***"]이 된다.
import sys
sys.setrecursionlimit(10 ** 6)
def star(n):
if n == 3:
array[1] = ["*", " ", "*"]
array[0] = array[2] = ["*"]*3
return
star(n//3)
for i in range(0, n, n//3):
for j in range(0, n, n//3):
if i != n//3 or j != n//3:
for k in range(n//3):
array[i+k][j:j + n//3] = array[k][:n//3]
N = int(sys.stdin.readline())
array = [[" "]*N for _ in range(N)]
star(N)
for i in range(N):
for j in range(N):
print(array[i][j], end="")
print()
import sys
sys.setrecursionlimit(10 ** 6)
def star(n):
if n == 1:
return ["*"]
stars = star(n//3)
array = []
for s in stars:
array.append(s*3)
for s in stars:
array.append(s + ' '*(n//3)+s)
for s in stars:
array.append(s*3)
return array
N = int(sys.stdin.readline().strip())
print('\n'.join(star(N)))