본문 바로가기
카테고리 없음

[백준][파이썬] 2447번 별찍기

by titaniumm 2020. 3. 22.

[핵심]

분할정복을 이용한 별찍기 문제이다.

분할정복을 좌표를 활용하여 문제를 문때는 항상 시작점을 (0,0)이 아닌

넘겨받은(X,Y)로 해야한다. -> 자꾸 실수함.

num = int(input())
lit =[["" for i in range(num)] for j in range(num)]
def recu(x,y,tf,cnt):
    if cnt == 3:
        for i in range(x,x+3):
            for j in range(y,y+3):
                lit[i][j] = "*"
                if i == x+1:
                    if j == y+1:
                      lit[i][j] = " "
        return
    else:
        cnt = cnt // 3
        recu(x, y, tf,cnt)
        recu(x, y+1*cnt, tf, cnt)
        recu(x, y+2*cnt, tf, cnt)
        recu(x+cnt, y, tf, cnt)
        recu(x+cnt, y+2*cnt, tf, cnt)
        recu(x+2*cnt,y, tf, cnt)
        recu(x+2*cnt,y+cnt, tf, cnt)
        recu(x+2*cnt,y+2*cnt, tf, cnt)
        for i in range(x+cnt,x+cnt+cnt):
            for j in range(y+cnt,y+cnt+cnt):
                lit[i][j] =" "
    return

recu(0,0,0,num)

for i in range(len(lit)):
    print("".join(map(str,lit[i])))

댓글