JH 개발 블로그
백준 파이썬 2447 별찍기 - 10 본문
https://www.acmicpc.net/problem/2447
n = int(input())
def star(l):
if l == 3:
return ['***','* *','***']
arr = star(l//3)
stars = []
for i in arr:
stars.append(i*3)
for i in arr:
stars.append(i+' '*(l//3)+i)
for i in arr:
stars.append(i*3)
return stars
print('\n'.join(star(n)))
n = 3일때
***
* *
***
n = 9일때
*********
* ** ** *
*********
*** ***
* * * *
*** ***
*********
* ** ** *
*********
n = 27일때
***************************
* ** ** ** ** ** ** ** ** *
***************************
*** ****** ****** ***
* * * ** * * ** * * *
*** ****** ****** ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
********* *********
* ** ** * * ** ** *
********* *********
*** *** *** ***
* * * * * * * *
*** *** *** ***
********* *********
* ** ** * * ** ** *
********* *********
***************************
* ** ** ** ** ** ** ** ** *
***************************
*** ****** ****** ***
* * * ** * * ** * * *
*** ****** ****** ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태입니다.
따라서 N의 패턴을 알려면 N//3 의 패턴을 알아야 합니다. 결국 재귀를 돌면서 N은 최소단위인 3이 되고, N=3일때의 패턴을 만들고 리턴해줍니다.
3의 패턴을 가지고 9의 패턴을 알게되고, 9의 패턴을 가지고 27의 패턴을 알게되고.. 반복하면서 결국 N의 패턴을 알게 됩니다. 패턴을 만들때 가운데부분은 비워주는걸 유의해야 합니다.
'코딩테스트 > 백준' 카테고리의 다른 글
백준 파이썬 11664 선분과 점 (0) | 2022.01.11 |
---|---|
백준 2448 파이썬 별찍기 - 11 (0) | 2021.12.31 |
백준 1891 파이썬 사분면 (0) | 2021.12.31 |
백준 1201 파이썬 NMK (0) | 2021.12.31 |
백준 파이썬 1074 Z (0) | 2021.12.31 |
Comments