

문제를 살펴보면 별을 그리되, 재귀함수를 사용하여 그려야한다
규칙 자체는 이해하는데 어렵지 않다 중앙만 비우면 되기 때문이다
그래서 예제에서 27을 입력하면 한 줄에 최대 27개의 별이 그려지고 정사각형 모양이 규칙적으로 등장한다
큰 정사각형으로 보아도, 작은 정사각형으로 보아도 중앙은 공백으로 채워져있다
재귀함수를 사용해서 하려고 하니 꽤나 오랜시간 고민을 하였는데,
작은 정사각형 하나를 기준으로 잡고 코드를 작성하였다
def draw_star(n):
if n == 3:
return ['***', '* *', '***']
star = draw_star(n//3)
result = []
for st in star:
result.append(st * 3)
for st in star:
result.append(st + ' ' * (n//3) + st)
for st in star:
result.append(st * 3)
return result
N = int(input())
print('\n'.join(draw_star(N)))
함수에 3이 입력되면 작은 정사각형을 return한다
입력값이 3보다 크다면 재귀적으로 n을 3으로 나눈 별 모양을 만들어주게 된다
그렇게 되면 star에는 n//3, n//3 크기의 별 모양이 저장이 되는데 이렇게 만든 별 모양을 3번의 for문을 통해 결합해준다
마지막에 결합한 별 모양을 return 해주면 되는데, 해당 별 모양은 리스트 모양으로 저장되기 때문에
join함수를 통하여 줄바꿈과 동시에 결과값을 출력하도록 작성하면 된다
↓ 리스트로 저장된 경우의 반환된 값(draw_star(9))↓
[
'*********',
'* ** ** *',
'*********',
'*** ***',
'* * * *',
'*** ***',
'*********',
'* ** ** *',
'*********'
]

'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 15649 N과 M (1)(실버 3) - Python, C++ (0) | 2024.12.23 |
|---|---|
| [Baekjoon]백준 11729 하노이 탑 이동 순서(골드 5) - Python (1) | 2024.12.22 |
| [Baekjoon]백준 4779 칸토어 집합(실버 3) - Python (1) | 2024.12.20 |
| [Baekjoon]백준 1676 팩토리얼 0의 개수(실버 5) - Python (1) | 2024.12.19 |
| [Baekjoon]백준 2609 최대공약수와 최소공배수(브론즈 1) - Python (0) | 2024.12.18 |