
안녕하세요 !
오늘은 백준 2447번 - 별 찍기 10 문제를 가져왔습니다.

문제를 해결하는 방법은 다음과 같습니다.
- 입력을 받는다.
- nn 배열을 만들어 으로 채워준다.
- 재귀 함수를 사용해서 nn ... 99, 33 배열로 나눠서 가운데 부분을 공백으로 바꿔준다.
- 별을 출력한다.
n = int(input())
def make_arr(num): arr = [] for i in range(num): a = [] for j in range(num): a.append('*') arr.append(a) return arr
재귀 함수를 사용해서 n*n ... 9*9, 3*3 배열로 나눠서 가운데 부분을 공백으로 바꿔준다.
아래 그림과 같이 27*27 배열 기준으로 같은 2차원 배열로 9등분해서 9*9 배열을 만들고 가운데 빨간 부분은 공백으로 채워준다. 그리고 재귀를 사용해서 9*9 배열을 9등분해서 3*3 배열로 만들어주고 가운데 초록색 부분은 공백으로 채워준다.

배열을 직접적으로 나누지 않고 인덱스를 나눠서 접근하도록 했다.
def make_star(arr, length, row1, col1): if length ==1: return step = length // 3 for i in range(col1+step, col1+2*step): for j in range(row1+step, row1+2*step): arr[i][j] = ' ' for i in range(col1, length+col1, step): for j in range(row1, length+row1, step): make_star(arr, step, i, j)
for i in range(n): for j in range(n): print(arr[i][j], end='') print()
def make_arr(num):
arr = []
for i in range(num):
a = []
for j in range(num):
a.append('*')
arr.append(a)
return arr
def make_star(arr, length, row1, col1):
if length ==1:
return
step = length // 3
for i in range(col1+step, col1+2*step):
for j in range(row1+step, row1+2*step):
arr[i][j] = ' '
for i in range(col1, length+col1, step):
for j in range(row1, length+row1, step):
make_star(arr, step, i, j)
n = int(input())
arr = make_arr(n)
result_arr = make_star(arr, n, 0, 0)
for i in range(n):
for j in range(n):
print(arr[i][j], end='')
print()
오랜만이시군여~ 학교 다니고 계신가요..!