[BOJ][Python]별 찍기 - 10 #2477

MEIN_FIGUR·2021년 8월 24일
0

백준_문제풀이

목록 보기
17/21
post-custom-banner

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

📌풀이


내가 쓴 풀이(성공)

  • 재귀 함수 활용
  • 3의 k제곱 = N기준 k를 활용하여 star 구현
    • Base case는 k==1인 경우, 위치 활용을 위해 x, y를 keyword argument로 설정
    • 현재 k값에서 가운데 부분을 비우고, k를 하나 줄인 상태로 재귀
      • 위치를 고려하여 x, y 설정
def star(k, x=0, y=0): # k : 거듭제곱 수, x : 시작 x값, y: 시작 y값
    global arr
    mid = 3**(k-1)
    
    if k == 1: # 길이가 3인 배열인 경우
        arr[y+k][x+k] = ' '
        
    else :
        # 현재 k값 기준 가운데를 비우는 부분
        for i in range(mid, mid*2): 
            for j in range(mid, mid*2):
                arr[y+i][x+j] = ' '
        
        # 빈부분 기준 테두리 부분 재귀함수
        for i in range(y, y+3**k, mid):
            for j in range(x, x+3**k, mid):
                if i==mid and j==mid:
                    continue
                star(k-1, i, j)
        
        
    
n = int(input())
arr = [['*']*n for _ in range(n)]
k, tmp = 0, n
while tmp != 1:
    tmp //= 3
    k += 1
star(k)
for i in range(n):
    print(''.join(arr[i]))



📌후기


재귀랑 친해지려고 노력중,,,생각보다 쉽지 않다...백트래킹도 어려워서 더 많이 해봐야 할 것 같다!

profile
Growing Developer
post-custom-banner

0개의 댓글