[python] 백준 2447번

도덩이의 개발 일지·2025년 7월 8일

백준

목록 보기
127/131
post-thumbnail

안녕하세요 !

오늘은 백준 2447번 - 별 찍기 10 문제를 가져왔습니다.


문제 설명


해결 방법

문제를 해결하는 방법은 다음과 같습니다.

  1. 입력을 받는다.
  2. nn 배열을 만들어 으로 채워준다.
  3. 재귀 함수를 사용해서 nn ... 99, 33 배열로 나눠서 가운데 부분을 공백으로 바꿔준다.
  4. 별을 출력한다.

  1. 입력을 받는다.
n = int(input())

  1. nn 배열을 만들어 으로 채워준다.
def make_arr(num):
    arr = []
    for i in range(num):
        a = []
        for j in range(num):
            a.append('*')
        arr.append(a)
    return arr

  1. 재귀 함수를 사용해서 n*n ... 9*9, 3*3 배열로 나눠서 가운데 부분을 공백으로 바꿔준다.

    아래 그림과 같이 27*27 배열 기준으로 같은 2차원 배열로 9등분해서 9*9 배열을 만들고 가운데 빨간 부분은 공백으로 채워준다. 그리고 재귀를 사용해서 9*9 배열을 9등분해서 3*3 배열로 만들어주고 가운데 초록색 부분은 공백으로 채워준다.

배열을 직접적으로 나누지 않고 인덱스를 나눠서 접근하도록 했다.

def make_star(arr, length, row1, col1):
    if length ==1:
        return
    step = length // 3
    for i in range(col1+step, col1+2*step):
        for j in range(row1+step, row1+2*step):
            arr[i][j] = ' '
    for i in range(col1, length+col1, step):
        for j in range(row1, length+row1, step):
            make_star(arr, step, i, j)

  1. 별을 출력한다.
for i in range(n):
    for j in range(n):
        print(arr[i][j], end='')
    print()

전체 코드

def make_arr(num):
    arr = []
    for i in range(num):
        a = []
        for j in range(num):
            a.append('*')
        arr.append(a)
    return arr

def make_star(arr, length, row1, col1):

    if length ==1:
        return
    
    step = length // 3

    for i in range(col1+step, col1+2*step):
        for j in range(row1+step, row1+2*step):
            arr[i][j] = ' '
    
    for i in range(col1, length+col1, step):
        for j in range(row1, length+row1, step):
            make_star(arr, step, i, j)

n = int(input())
arr = make_arr(n)
result_arr = make_star(arr, n, 0, 0)


for i in range(n):
    for j in range(n):
        print(arr[i][j], end='')
    print()
profile
말하는 감자에서 개발자로 ( ´͈ ᵕ `͈ )◞♡

2개의 댓글

comment-user-thumbnail
2025년 7월 10일

오랜만이시군여~ 학교 다니고 계신가요..!

1개의 답글