[백준] 별 찍기 - 10 (파이썬)

Woonil·2025년 3월 27일
0

알고리즘

목록 보기
35/38
post-thumbnail

재귀는 늘 새롭다. 이 문제의 경우 분할과 정복 느낌으로 접근해봤다. 이때, 항상 조심해야 할 점이 재귀 함수 내에서 기준점이 되는 좌표를 잘 설정해야 한다는 것이다.

🤔접근

우선 nxn 크기의 배열 원소를 모두 ⭐로 채운다. 재귀함수의 기준점 si, sj는 9등분한 정사각형의 시작점이 된다. 제일 바깥의 중첩 반복문은 9등분한 정사각형의 시작점을 방문한다. 단, 정중앙 정사각형의 시작점인 경우는 해당 n//3xn//3 만큼을 ⭐을 빈 문자열로 바꾼다. 정중앙이 아닌 경우는 해당 구간의 시작점을 인자로 하여 재귀함수를 호출한다. 물론 재귀함수 호출 시 크기도 n//3로 줄여야 한다.

😎풀이

import sys
input=sys.stdin.readline

def recursion(si,sj,n):
    if n==1:
        return
        
    for i in range(si,si+n,n//3):
        for j in range(sj,sj+n,n//3):
            if i==si+n//3 and j==sj+n//3:
                for k in range(i,i+n//3):
                    for s in range(j,j+n//3):
                        arr[k][s]=' '
            else:
                recursion(i,j,n//3)

n=int(input().rstrip())
arr=[['*']*n for _ in range(n)]
recursion(0,0,n)

for row in arr:
    print(''.join(row))
profile
프론트 개발과 클라우드 환경에 관심이 많습니다:)

0개의 댓글

관련 채용 정보