[알고리즘 스터디 - 1주차 6] 별 안에 별 안에 별 찍기

난이도

Gold 5

문제

규칙에 따라 별을 찍어보자.

먼저 $Star_0$ 는 별이 하나만 있는 패턴이다.

*

그리고 양의 정수 $i$ 에 대하여 $Star_i$ 의 패턴은 다음과 같다. 빈칸은 공백으로 채워져야 한다.

정수 $N$ 이 주어질 때 $Star_N$ 을 출력해 보도록 하자.

입력

정수 $N$ 이 주어진다. $(0 \leq N \leq 5)$ 

출력

$Star_N$ 을 출력한다. 모든 공백을 출력해야 함에 유의한다.

예제 입력

2

예제 출력

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

해설 및 후기

Gold4짜리 10993 별 찍기 - 18 문제로 재미를 본 후 비슷한 문제를 풀어보려고 골라본 문제이다. 마찬가지로 재귀를 이용해 풀 수 있었으며, hoshi(n-1)에서 리턴된 리스트의 크기만큼을 5번 순회하며 리턴할 리스트를 형성한다.

제출 코드

n = int(input())

def hoshi(num):
    if(num==0):
        return ['*']
    toret = []
    bef = hoshi(num-1)
    bSize = len(bef)#1, 5 ...
    for i in range(bSize):
        tmp = ' '*bSize*2
        tmp += bef[i]
        tmp += ' '*bSize*2
        toret.append(tmp)

    for i in range(bSize):
        tmp = ' '*bSize*2
        tmp += bef[i]
        tmp += ' '*bSize*2
        toret.append(tmp)

    for i in range(bSize):
        tmp = ''
        for j in range(5):
            tmp += bef[i]
        toret.append(tmp)
    
    for i in range(bSize):
        tmp = ''
        tmp += ' '*bSize
        for j in range(3):
            tmp += bef[i]
        tmp += ' '*bSize
        toret.append(tmp)
    
    for i in range(bSize):
        tmp = ' '*bSize
        tmp += bef[i]
        tmp += ' '*bSize
        tmp += bef[i]
        tmp += ' '*bSize
        toret.append(tmp)
    
    return toret

a = hoshi(n)
for i in a:
    print(i)