반응형
https://www.acmicpc.net/problem/2448
n = int(input())
def star(k):
if k == 3:
return [[' ', ' ', '*', ' ', ' '], [' ', '*', ' ', '*', ' '], ['*', '*', '*', '*', '*']]
output = []
unit = star(k // 2)
k = k//2
for i in range(2*k):
if i < k:
output.append([' ']*k + unit[i] + [' ']*k)
else:
output.append(unit[i-k] + [' '] + unit[i-k])
return output
answer = star(n)
for i in range(len(answer)):
print(''.join(answer[i]))
내가 정말 약한 유형같다.. 연습이 많이 필요해보임
이번 문제를 통해 깨달은 풀이법은
1. 반복되는 모양의 최소 유닛을 찾음
2. 재귀함수의 종단점엔 그 유닛을 리턴하도록 함
3. output이라는 새 리스트를 만들어서 이곳에 새 유닛을 만드는 거임. 이렇게 새리스트를 만들어줘야 리스트가 고차원으로 불어나는 것을 막을 수 있음
4. 모양에 맞게 적절히 output에 append 해준다.
5. return output
댓글