아임'준
[BOJ / 파이썬] 2447번: 별 찍기 - 10 본문
반응형
백준 / BOJ / Python / 파이썬
문제 링크 : https://www.acmicpc.net/problem/2447
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
단계 : 재귀
알고리즘 분류 : 분할정복, 재귀
풀이:
사각형을 9등분했을 때 가운데를 공백으로 비워두는 것이 문제의 목적이다. n*n 크기의 정사각형 리스트를 만들어 둔 후 n은 3의 거듭제곱이라 하였으니 n을 기준으로 중심을 계산해서 공백을 넣는 방식으로 풀면 된다. 재귀 형탠는 작업을 할 정사각형의 왼쪽 위 좌표와 정사각형 한 변의 길이를 넘겨주는 방식으로 진행한다.
예를 들어 27의 정사각형을 작업할 때는 27*27의 중앙을 공백으로 바꾼 후 9개의 9*9 꼴의 정사각형으로 다시 나누어 각 정사각형마다 중앙을 공백으로 나눈다. 이미 공백으로 바뀐 곳은 *로 만들어 주는 부분이 재귀함수에 존재하지 않기 때문에 그대로 공백으로 남아있을 것이며 정사각형 한 변의 길이가 3이 될 때 가운데를 공백으로 만들어주고 재귀를 종료한다.
코드
def rect_star(x, y, n, ls):
if n == 3:
ls[x + 1][y + 1] = " "
else:
temp = n // 3
for i in range(x + temp, x + 2 * temp):
for j in range(y + temp, y + 2 * temp):
ls[i][j] = " "
for i in range(0, n, temp):
for j in range(0, n, temp):
rect_star(x + i, y + j, temp, ls)
n = int(input())
ls = [["*" for i in range(n)] for i in range(n)]
rect_star(0, 0, n, ls)
for i in range(0, n):
for j in range(0, n):
print(ls[i][j], end="")
print()
'문제풀이 > BOJ' 카테고리의 다른 글
[BOJ / 파이썬] 2751: 수 정렬하기 2 (0) | 2021.10.04 |
---|---|
[BOJ / 파이썬] 11729: 하노이 탑 이동 순서 (0) | 2021.10.04 |
[BOJ / 파이썬] 4948번: 베르트랑 공준 (0) | 2021.08.03 |
[BOJ / 파이썬] 1929번: 소수 구하기 (0) | 2021.08.02 |
[BOJ / 파이썬] 11653번: 소인수분해 (0) | 2021.08.02 |
Comments