본문 바로가기

백준

[백준알고리즘] 2447번 별찍기 파이썬

반응형

문제

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.

***
* *
***

크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.

N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.

입력

첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3^k이며, 이때 1 ≤ k < 8이다.

출력

첫째 줄부터 N번째 줄까지 별을 출력한다.

예제

27을 넣어서 진짜 27줄이 출력됨을 확인할 수 있다.

3의 3승이므로 가로 3칸, 세로3칸이 만들어지고 가운데칸일 때마다 크게 구멍(?)이 나는 걸 확인할 수 있다.

 

순서를 따지면 1,4,7 일 때 구멍이 뚫려있다.

27보다 더 큰 숫자가 나올 때 1,4,7,10,13 이런 식으로 3씩 증가한 자리가 빈칸임을 알 수 있다.

이의 공통점을 살펴보자.

각각 3으로 나눴을 때 나머지가 1임을 알 수 있다.

 

import sys

num = int(input())

def star(x, y):
    while(x != 0):
        if(x % 3 == 1 and y % 3 == 1):
            sys.stdout.write(' ')
            return None
        x = x // 3 #몫
        y = y // 3
    sys.stdout.write('*')

for x in range(num):
    for y in range(num):
            star(x, y)
    sys.stdout.write('\n')

몫이 0이 되기 전까지 계산한다.

좌표를 생각하면 된다.

x,y좌표를 모두 3으로 나눴을 때 나머지가 1이면 빈칸.

아니면 '*'별을 찍어준다.

반응형