[BAEKJOON][Python] 2447 - 별 찍기

김지훈·2023년 12월 30일

알고리즘

목록 보기
8/19

🔖 https://www.acmicpc.net/problem/2447


✏️ 풀이 과정

📝 접근

  • N은 3의 거듭제곱 꼴이므로, 위 그림과 같이 N >= 9에 대하여 전체를 9분할로 나누었을 때, (1, 1)에 해당하는 칸은 공백으로 채워져 있어야 한다. 따라서 분할 정복을 통하여 문제를 해결하는 것이 자연스럽다.

✨ 소스 코드

import sys
input = sys.stdin.readline

def solve(y, x, n):
	# 기저 사례
    if n == 1: return

	# (1, 1)에 해당하는 칸 공백으로 채움
    for i in range(x + (n // 3), x + (n // 3) * 2):
        for j in range(y + (n // 3), y + (n // 3) * 2):
            result[i][j] = " "

    n //= 3
    for i in range(3):
        for j in range(3):
            if i == 1 and j == 1: continue
            solve(y + i * n, x + j * n, n)

n = int(input())
result = [["*"] * n for _ in range(n)]
solve(0, 0, n)
for row in result:
    print(''.join(row))

0개의 댓글