Python - [백준]2447-별찍기 10

Paek·2023년 1월 24일
0

코테공부

목록 보기
12/44

출처

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

문제

주어진 형식대로 재귀를 사용하여 별찍기를 하는 문제이다.

접근방식

바로 재귀를 사용해서 print를 하기에는 어려울 것 같다는 생각이 들었다.
3의 제곱으로 이루어진 패턴임으로 서서히 27 -> 9 -> 3 으로 범위를 줄여서 패턴화시키는 문제인데 저장이 아닌 프린트 형식이라 좀 어려울 것 같다는 생각이 들었다. 그래서 배열을 따로 만들어서 정보를 다 고쳐놓고 나중에 한번에 프린트를 하는 방식을 사용하기로 하였다.

풀이

정보를 저장할 빈 배열 arr을 사용하여 n이 3이 되었을때 3x3패턴의 정사각형 모양을 arr배열에 기록해주었다.
만약 n이 3 이상이라면 계속 재귀문을 호출하도록 하였다.

n = int(input())
arr = [[" "]*n for i in range(n)]

def is_possible(x, y):
    return 0 <= x < n and 0 <= y < n
    

def recursion(x, y, n):
    if n <= 3:
        for i in range(3):
            for j in range(3):
                if i==1 and j==1:
                    continue
                arr[x+i][y+j] = "*"
        return
    else:
        for i in range(x, x+n, n//3):
            for j in range(y, y+n, n//3):
                if i == x+n//3 and j == y+n//3:
                    continue
                else:
                    if is_possible(x, y):
                        recursion(i, j, n//3)
    
recursion(0, 0, n)
for i in range(n):
    print("".join(arr[i]))
profile
티스토리로 이전했습니다. https://100cblog.tistory.com/

0개의 댓글