0. 문제
1. 문제 생각
규칙을 유추해보는 과정, 패턴을 파악하는 것이 그리 어렵지는 않았으나 마음처럼 뭉탱이로 구현할 수 없어 생각을 좀 더 했던 것 같다!
재귀적으로 패턴이 반복되는 것이 보여서 아래 종이에서 보이는 것처럼
12를 채우기 위해 6으로 쪼개서 나아가고
다시 6을 채우기 위해 3으로 쪼개서 나아가는 방법으로 분할정복 재귀를 써야겠다고 생각했다.
평소 그리는 분할정복의 로직은 아래와 같다.
def div_conquer():
#가장 밑 분할 노드 도착했을 때 return
#분할해서 간 결과값 1
a=div_conquer( )
#분할해서 간 결과값 2
b=div_conquer( )
#그걸 이용해 합치는 등의 연산을 취하거나 또는 계속해서 다른 쪽으로 로직 나아가기
c=a+b
2. 문제풀이(종이)
3. 문제 구현
def div_conquer(i,j,n):
#가장 밑 분할 노드 도착했을 때 return
if n==3:
star[i][j-2:j+3]=' * '
star[i+1][j-2:j+3]=' * * '
star[i+2][j-2:j+3]='*****'
return
else:
div_conquer(i,j,n//2)
div_conquer(i+n//2,j-n//2,n//2)
div_conquer(i+n//2,j+n//2,n//2)
N=int(input())
star=[[' ' for _ in range(2*N)] for _ in range(N)]
div_conquer(0,N-1,N)
for i in star:
print(*i,sep='')
4. 한번에 풀었는가? X
List 인덱스 범위 때문에 한 번에 풀지 못했다.5*N/3이라고 생각했는데 2*N이어야 한다.!
'알고리즘 > 세부구현' 카테고리의 다른 글
[PS | 한 번에 맞자!] 백준 4256 (0) | 2023.07.15 |
---|---|
[PS | 한 번에 맞자!] 백준 1713 (0) | 2023.07.15 |
[PS | 한 번에 맞자!] 백준 16938 (0) | 2023.07.11 |
[PS | 한 번에 맞자!] 백준 1863 (0) | 2023.07.10 |
[PS | 한 번에 맞자!] 백준 3048 (0) | 2023.07.10 |