[백준] 2448번 - 별 찍기 11

chanyeong kim·2022년 6월 8일
0

백준

목록 보기
120/200
post-thumbnail

📩 출처

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

n = 24


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


입력

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

출력

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

👉 생각

  • 먼저 graph라는 이차원 배열을 만들어서 각각의 값을 '*'로 채워 넣은 후 출력을 하는 방식이다.
  • n이 3일 라면 graph의 값을 '' 채워 넣고 그렇지 않으면 각각의 x와 y좌표를 찾아가서 ''을 채워놓도록 하는 분할정복을 적용했다.
n = int(input())
graph = [[' '] * 2 * n for _ in range(n)]

def star(x, y, n):
    if n == 3:
        graph[x][y] = '*'
        graph[x + 1][y - 1] = graph[x + 1][y + 1] = '*'
        for i in range(-2, 3):
            graph[x + 2][y + i] = '*'
    else:
        next = n // 2
        star(x, y, next)
        star(x + next, y - next, next)
        star(x + next, y + next, next)

star(0, n - 1, n)
for i in graph:
    print("".join(i))

0개의 댓글