백준 파이썬 2447: 별찍기 - 10

2021. 11. 1. 17:18컴퓨터 사이언스/Algorithm

반응형

문제의 핵심 알고리즘 = 재귀함수

도움을 받은 블로그 = https://yeol2.tistory.com/38

 

백준 #2447: 별찍기 [Python]

접근법 사실 어떤 규칙이 있는지 찾는데도 시간이 오래 걸렸다. 우선 규칙은 예시로 나와있는 출력을 아래와 같이 줄을 그어보면 찾을 수 있다. 크게 3 * 3 형태의 사각형만 주목해서 보다 보면

yeol2.tistory.com

 

별 찍기 - 10


 

시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 256 MB 37799 19554 14436 51.685%

문제


재귀적인 패턴으로 별을 찍어 보자. 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=3k이며, 이때 1 ≤ k < 8이다.

출력


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

예제 입력 1


27

예제 출력 1


*************************** * ** ** ** ** ** ** ** ** * *************************** *** ****** ****** *** * * * ** * * ** * * * *** ****** ****** *** *************************** * ** ** ** ** ** ** ** ** * *************************** ********* ********* * ** ** * * ** ** * ********* ********* *** *** *** *** * * * * * * * * *** *** *** *** ********* ********* * ** ** * * ** ** * ********* ********* *************************** * ** ** ** ** ** ** ** ** * *************************** *** ****** ****** *** * * * ** * * ** * * * *** ****** ****** *** *************************** * ** ** ** ** ** ** ** ** * ***************************

코드

# 별들을 만들 함수
def get_stars(n):
    # 별들을 담을 리스트
    Temp = []
    # 
    for i in range(3 * len(n)):
        # n(즉 len(stars))이 3으로 나누어 떨어지지 않는다면(1이 남는다면) 가운데 공백을 줌(n의 길이 만큼)
        if i // len(n) ==  1:
            Temp.append(n[i % len(n)] + " " * len(n) + n[i % len(n)])
        
        # n이 3으로 나누어 떨어진다면, 공백 없이 가득 채움
        else:
            Temp.append(n[i % len(n)] * 3)
    
    return Temp



stars = ["***", "* *", "***"]
n = int(input())
k = 0

# 만약 n이 3이 될 때 까지 n은 3으로 나눠준 값을 다시 n값으로 지정하고 k 1씩 추가
while n != 3:
    n = int(n / 3)
    
    # k는 함수를 몇번 실행할지 정하는 변수 
    k += 1

for i in range(k):
    stars = get_stars(stars)
for i in stars:
    print(i)
반응형

 

반응형