Algorithm Study/Python

[백준 파이썬] # 2447 별 찍기 - 10

728x90
반응형

Silver III

# 2447 별 찍기 - 10

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

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

 

풀이

N = int(input())

# 빈 공간 생성
arr = [[' '] * N for i in range(N)]

# 재귀문 작성
def fill_stars(size, x, y):  # size: 확인하려는 공간(n*n)의 크기, x: x좌표, y: 좌표) 

    # 재귀문의 탈출 조건, 더 이상 작아질 수 없을 때 '*' 입력
    if size == 1:
        arr[y][x] = '*'

    else:
        new_size = size//3  # 재귀문이 반복되는 크기
        for dx in range(3):
            for dy in range(3):
                if dx != 1 or dy != 1:
                    fill_stars(new_size, x+dx*new_size, y+dy*new_size)
                    # new_size에서의 x좌표, y좌표 설정

fill_stars(N, 0, 0)
for k in arr:
    print(''.join(k))

 

후기

  • 구글링 통해서 이해했다. (거의 암기수준으로.. ) 확인해야 하는 행렬의 size, x좌표, y좌표를 가지고 함수를 만들어서 재귀 반복으로 별을 기입했다.

  • 모든 공간에 별이 기입된 상태에서 빈 공간을 기입하는, 하향식 방법에 대해서 추가적인 공부가 필요하다

  • 구글링 없이 스스로 풀 수 있는지에 대해서도 점검이 필요하다.