문제풀이/분할정복

[Python/파이썬] 백준 2448번 별 찍기 - 11

딜레이레이 2023. 5. 8. 21:37
 

2448번: 별 찍기 - 11

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

www.acmicpc.net

 

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.


입력

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


출력

첫째 줄부터 N번째 줄까지 별을 출력한다.


코드

n = int(input())

def triangle(n):
    if n == 3:
        return ["  *  ", " * * ", "*****"]
    tmp = triangle(n//2)
    res = []
    
    for t in tmp:
        res.append(' '*(n//2) + t + ' '*(n//2))
    for t in tmp:
        res.append(t + ' ' + t)
    return res

print('\n'.join(triangle(n)))

 

백준 2447번 별 찍기 - 10과 동일한 방법으로 풀이하였다.

분할정복의 원리로 큰 문제를 작은 문제로 쪼개서 풀이하면 된다. 이 문제를 보면 가장 기본이 되는 모양이 반복되며 점점 큰 문양을 그리는 것을 알 수 있다.