본문 바로가기
Algorithm(알고리즘)/BOJ(백준) 문제풀이

백준 10994번 파이썬 | 별 찍기 -19 | 재귀함수

by Jun_N 2020. 9. 22.

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

첫째 줄부터 차례대로 별을 출력한다.

 

 


풀이

n에 따라서 (4*n -3) 만큼의 칸수들이 생기며 테두리를 감싸고 있는 것들의 내부에는 똑같은 것들이 반복된다.

따라서 recursion으로 n을 1씩 줄이면서 x,y좌표의 값들을 2씩 더해준 후 재귀함수로 풀면 쉽게 풀 수 있다.

(처음에 이 로직을 생각하는 것이 익숙하지 않을 수도 있으니 연습하자..)

 

def draw(n, idx):
    if n == 1:
        starMap[idx][idx] = '*'
        return ;
    l = 4 * n -3
    
    
    for i in range(idx, l+idx):
    	#위 아래
        starMap[idx][i] = '*'
        starMap[idx+l-1][i] = '*'
        
        #양 옆
        starMap[i][idx] = '*'
        starMap[i][idx+l-1] = '*' 
 
    return draw(n-1, idx+2)
    
    
n = int(input())
lens = 4 * n -3

starMap = [[' '] * lens for _ in range(lens)]

draw(n,0)

for i in range(lens):
    for j in range(lens):
        print(starMap[i][j], end="")
    print()

 

 

배운 꿀팁

starMap = [[' '] * lens for _ in range(lens)]

이렇게 2차 배열을 쉽게 선언할 수 있다.!!