문제

[백준] 별 찍기 - 10 (Gold 5)

요약

  • 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)