Note

[백준] 69. 별 찍기 10 본문

etc/Coding Test

[백준] 69. 별 찍기 10

알 수 없는 사용자 2021. 11. 29. 18:04
728x90

문제

재귀적인 패턴으로 별을 찍어 보자.

N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.

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

***
* *
***

N이 3보다 클 경우,

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

예를 들어 크기 27의 패턴은 예제 출력 1과 같다.

첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다.

즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k < 8이다.

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

def draw_stars(n):
    matrix = []
    for i in range(3 * len(n)):
        if i // len(n) == 1:
            matrix.append(n[i % len(n)] + " " * len(n) + n[i % len(n)])
        else:
            matrix.append(n[i % len(n)] * 3)
    return matrix
 
 
star = ["***", "* *", "***"]
n = int(input())
e = 0
while n != 3:
    n = int(n / 3)
    e += 1
 
for i in range(e):
    star = draw_stars(star)
for i in star:
    print(i)

 

다른 사람의 숏코딩

n=int(input())
s='*'
while n>1:
 t=[i*3 for i in s]
 s=t+[i+' '*len(i)+i for i in s]+t
 n//=3
print('\n'.join(s))

공부가 더 필요하다고 느끼는 부분..

 

입력

27

 

출력

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

 

'etc > Coding Test' 카테고리의 다른 글

[백준] 71. 단어 뒤집기  (0) 2021.12.01
[백준] 70. 수 정렬하기  (0) 2021.11.30
[백준] 68. 피보나치 수 5  (0) 2021.11.28
[백준] 67. 팩토리얼  (0) 2021.11.27
[백준] 66. 터렛  (0) 2021.11.26
Comments