기록하는삶
[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 2447번 _ 별 찍기 - 10 본문
백준(Python)/재귀(recursion)
[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 2447번 _ 별 찍기 - 10
mingchin 2022. 2. 6. 23:23728x90
반응형
https://www.acmicpc.net/problem/2447
[문제]
재귀적인 패턴으로 별을 찍어 보자. 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번째 줄까지 별을 출력한다.
[아이디어]
1) 같은 모양을 반복해서 그린다.
2) n번째 모양을 기준으로 (n+1)번째 모양을 만들기 위해서는 n번째 모양 8개를 3번에 걸쳐 이어 붙이면 된다. 첫 3개의줄과 마지막 3개의 줄에는 n번째 도형을 3개 이어 붙이고, 가운데 3개의 줄에는 중앙에 빈 공간을 두고 2개를 더하여 붙이면 된다. 이때 빈 공간의 길이는 n번째 도형의 한 줄의 길이와 같다.
# 별찍기 10
n = int(input())
d= {3:['***','* *','***']}
def answer(n):
if n ==3:
return d[3]
else:
if n not in d:
a = answer(n//3)
tmp = [3*x for x in a]
d[n] = tmp + [x+' '*len(x)+x for x in a] + tmp
return d[n]
print(*answer(n), sep = '\n')
728x90
반응형
'백준(Python) > 재귀(recursion)' 카테고리의 다른 글
[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 2448번 _ 별 찍기 - 11 (0) | 2022.02.06 |
---|---|
[코딩 테스트 연습(파이썬/Python)] 백준 17478번 _ 재귀함수가 뭔가요? (0) | 2021.11.19 |
[코딩 테스트 연습(파이썬/Python)] 백준 11729번 _ 하노이 탑 이동 순서 (0) | 2021.11.19 |