[알고리즘 스터디 - 1주차 5] 별 찍기 - 18
난이도
Gold 4
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(1 ≤ N ≤ 10)이 주어진다.
출력
첫째 줄부터 차례대로 별을 출력한다.
예제 입력
3
예제 출력
*
* *
* *
*******
* *** *
* * *
*************
해설 및 후기
오랜만에 재귀를 이용한 별찍기를 이용해 문제를 풀이했다. n-1번째에 해당하는 별 모양을 리스트로 받고, 뒤집힌 모양을 기준으로 새로운 별찍기 모양을 생성해 리스트로 반환한다. 그리고 앞쪽 공백을 최종 print때 처리한다(앞쪽 공백은 재귀되지 않으므로)
제출 코드
def hoshi(num):
if(num==1):
return ['*']
else:
toret = []
bef = hoshi(num-1)
if(bef[0] == '*'): #편의를 위해 원하는 모양으로 항상 뒤집기
bef = list(reversed(bef))
befLen = len(bef)
toret.append('*')
for i in range(befLen-1):
tmp = '*'
tmp += ' '*(1 + 2*i)
tmp += '*'
toret.append(tmp)
toret.append('*'+bef[0]+'*')
for i in range(1, befLen):
tmp = '*'
tmp += ' '*2*i
tmp += bef[i]
tmp += ' '*2*i
tmp += '*'
toret.append(tmp)
toret.append(bef[0]*2+'*'*3)
if(num%2 == 0):
toret = list(reversed(toret))
return toret
n = int(input())
r = hoshi(n)
for i in range(len(r)):
if(n%2 == 0):
print(' '*i, end='')
else:
print(' '*(len(r)-i-1), end='')
print(r[i])