백준_2447_별 찍기(재귀)

맹민재·2023년 4월 2일
0

알고리즘

목록 보기
17/134
post-thumbnail
def star(k):
    if k == 3:
        cnt = 0
        for i in range(3):
            for j in range(3):
                if cnt != 4:
                    board[i][j] = "*"
                cnt += 1
        return
    star(k//3)
    a = k//3
    for i in range(3):
        for j in range(3):
            if i == 1 and j == 1:
                continue
            for t in range(a) :
                board[a*i+t][a*j:a*(j+1)] = board[t][:a]

n = int(input())
board = [[" "]*n for _ in range(n)]
star(n)
for i in range(n):
    for j in range(n):
        print(board[i][j], end="")
    print()

직접 해결하지 못했다. 특히 "board[a*i+t][a*j:a*(j+1)] = board[t][:a]" 이 부분을 이해하는데 오래 걸렸다.

풀이를 해보자면 k가 3일 때는 패턴 모양을 완성시키고 재귀 종료 조건으로 한다.

그 다음 k의 크기가 몇이든 크게 9등분한다. 9등분을 재귀를 돌면서 패턴에 맞게 채우는 방식이다.

패턴을 채울 때 가운데는 continue하고 나머지는 첫 번째 패턴을 그대로 복사? 하는 방식이다. 첫 번째 패턴을 복사하는 부분이 "board[a*i+t][a*j:a*(j+1)] = board[t][:a]" 이 부분이다.


크게 3등분하는 개념까지는 스스로 도달했지만 패턴을 완성시키는 부분에서 막혔었다.

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글