본문 바로가기
Problem Solving/Recursion

[재귀] 백준 2448번 : 별 찍기 - 11 / 골드 4

by ggyongi 2021. 11. 16.
반응형

https://www.acmicpc.net/problem/2448

 

2448번: 별 찍기 - 11

첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)

www.acmicpc.net

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 

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글