[백준] 별 찍기-11 (2448)

5168 단어 baekjoonbaekjoon

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/43105

문제

첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)

예제 입력
24

예제 출력

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

분류

  • 알고리즘 분류
    분할 정복, 재귀

  • 난이도
    골드 4

  • 사용 언어
    python 3

풀이

해당 모형은 위의 그림처럼 삼각형을 기준으로 위 한개, 아래 두개가 합쳐져 있는 모습이다.

주의할 점은 위쪽 삼각형의 경우또한 양쪽에 공백을 두어 아래의 길이와 맞춰야 한다는 것이다.

코드

def appendStar(n):
    if(n==3):
        return ["  *   "," * *  ","***** "] # 1
    
    star = appendStar(n//2)
    result = []
    
    for s in star:
        result.append(' '*(n//2) + s+ ' '*(n//2)) # 2
    for s in star:
        result.append(s*2) # 3
        
    return result
    
result = appendStar(int(input()))
for i in result:
    print(i)
  1. 입력의 최솟값일 경우 나오는 모양이다.
  2. 위 부분의 양쪽 공백을 해당 깊이만큼 설정
  3. 아래 부분은 같은 모양이 두번 반복되므로 각 줄에 대해서 문자열 연산

좋은 웹페이지 즐겨찾기