STUDY_SEONMIN

2447. 별 찍기 - 10 본문

STUDY/Baekjoon Algorithm

2447. 별 찍기 - 10

Kululu_ 2021. 7. 19. 18:52

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.

크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.

***
* *
***

N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 


첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k < 8이다.
첫째 줄부터 N번째 줄까지 별을 출력하는 프로그램을 작성하세요.

 

def draw_star(N):
    if N == 3:
        return ['***', '* *', '***']
    
    stars = []
    
    for i in range(3):
        for star in draw_star(N/3):
            if i == 1:
                stars.append(star+' '*int(N/3)+star)
            else:
                stars.append(star*3)

    return stars
    
N = int(input())
for star in draw_star(N):
    print(star)

 

  • 그림을 잘 생각해보면 크기 N의 패턴은 
    (N/3 패턴) (N/3 패턴) (N/3 패턴)
    (N/3 패턴) (N/3 공백) (N/3 패턴)
    (N/3 패턴) (N/3 패턴) (N/3 패턴)
    입니다.

  • 따라서 크기 N의 패턴을 그리기 위해서 총 3번 패턴 그리기를 반복한다 했을 때 첫번째에서는 이전 패턴을 3번 반복, 두번째에서는 이전 패턴 + 공백 + 이전 패턴, 세번째에서는 이전 패턴 3번 반복 과 같은 형태로 그림을 그리면 됩니다.
    -> draw_star(N) 함수 안에 이중 for문이 이 로직을 구현한 것입니다.

'STUDY > Baekjoon Algorithm' 카테고리의 다른 글

2798. 블랙잭  (0) 2021.07.20
11729. 하노이 탑 이동 순서  (0) 2021.07.19
10870. 피보나치 수 5  (0) 2021.07.18
10872. 팩토리얼  (0) 2021.07.18
1002. 터렛  (0) 2021.07.18
Comments