[Baekjoon] 30678. 별 안에 별 안에 별 찍기

Sungwoo·2025년 3월 11일
0

Algorithm

목록 보기
39/43
post-thumbnail

📕문제

[Baekjoon] 30678. 별 안에 별 안에 별 찍기

문제 설명

패턴에 따라 별을 찍는 문제다.
아래는 양의 정수 ii에 대해 Starii의 패턴이다.

i=0i=0

*

i=1i=1

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

i=2i=2

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

📝풀이

import sys
read = sys.stdin.readline

pattern = [
    [0, 0, 1, 0, 0],
    [0, 0, 1, 0, 0],
    [1, 1, 1, 1, 1],
    [0, 1, 1, 1, 0],
    [0, 1, 0, 1, 0]
]

def is_star(x, y, pattern_length):
    nx = (x // pattern_length) % 5
    ny = (y // pattern_length) % 5

    if pattern_length == 1:
        return pattern[ny][nx] == 1

    if pattern[ny][nx]:
        return is_star(x, y, pattern_length // 5)

    return False


def print_star_pattern(n):
    if n == 0:
        print("*")
        return

    size = 5 ** n
    for i in range(size):
        for j in range(size):
            print("*" if is_star(j, i, size // 5) else " ", end="")
        print()

N = int(read())
print_star_pattern(N)
  • is_star: 해당 칸에 별을 찍을지 판단하는 함수.
    재귀 형태로 가장 큰 패턴에서부터 작은 패턴으로 축소해가며 판단.
    • 현재 패턴에서 해당 칸이 별이면 해당 칸의 한 단계 작은 패턴에서 검사.
    • 현재 패턴에서 해당 칸이 공백이면 False반환.

모든 칸에 대해 is_star함수로 판단 후 출력.

0개의 댓글