n=3*2^m 일때 별을 찍는 문제인데요
저는 규칙성을 이용해서
n=eval(input())
a=" "*(2*n)
space=[]
for i in range(n):
space.append(a)
def star(spot,x):
spot=spot[:x]+'*'+spot[x+1:]
return spot
space[0]=star(space[0],n-1)
for j in range(n-2):
if j%3==0:
for k in range(2*n-2):
if space[j][k]=='*':
space[j + 1] = star(space[j + 1], k - 1)
space[j + 1] = star(space[j + 1], k + 1)
space[j + 2] = star(space[j + 2], k - 2)
space[j + 2] = star(space[j + 2], k - 1)
space[j + 2] = star(space[j + 2], k)
space[j + 2] = star(space[j + 2], k + 1)
space[j + 2] = star(space[j + 2], k + 2)
else:
pass
elif j%3==2:
for k in range(1,2*n-1):
if space[j][k-1]=='*' and space[j][k+1]==' ' and space[j][k]==' ':
space[j + 1] = star(space[j + 1], k)
elif space[j][k-1]==' ' and space[j][k+1]=='*' and space[j][k]==' ':
space[j + 1] = star(space[j + 1], k)
else:
pass
else:
pass
for i in range(n):
print(space[i])
이렇게 코드를 짜서 문제를 풀었는데 더 좋은 풀이법은 재귀함수를 이용하라고 나와 있어서요
재귀함수가 뭔지는 알고 있는데 이걸 코딩으로 짜려고 생각해봐도 이게 머릿속에서는 되는데
코딩으로 하려니깐 어떻게 해야할지 잘 모르겠어서 여쭤봅니다.
n=24일때 답은 이런식으로 나오게 됩니다.
* * * ***** * * * * * * ***** ***** * * * * * * ***** ***** * * * * * * * * * * * * ***** ***** ***** ***** * * * * * * ***** ***** * * * * * * * * * * * * ***** ***** ***** ***** * * * * * * * * * * * * ***** ***** ***** ***** * * * * * * * * * * * * * * * * * * * * * * * * ***** ***** ***** ***** ***** ***** ***** *****