문제
요약
- 3의 거듭제곱인 N이 주어진다.
- 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.
- N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다
분류
- 재귀
- 분할정복
풀이
1. 규칙 관찰, 풀이
- 기본적인 패턴을 분석해서 구현한다.
- 일단 크기 N의 패턴은 크기 (N/3)의 패턴을 반복한다. 여기서, 행과 열의 값을 N/3으로 나누었을 때 나머지가 1이 되는 값은 “ “ 으로 비워둔다. 즉, 가운데를 비운다.
- 결국 재귀적으로 구현할 수 있다.
n = int(input())
arr = [['*']]
def star(num, arr):
d = num // 3
temp = [row[:] for _ in range(3) for row in arr]
for i in range(num):
for j in range(d, num):
if i // d == 1 and j // d == 1:
temp[i].append(" ")
else:
temp[i].append(arr[i % d][j % d])
if num == n:
for val in temp:
print(''.join(val))
return
return star(num * 3, temp)
star(3,arr)