반응형
( 도움을 받은 블로그 = https://study-all-night.tistory.com/5 :)
[1] 문제
[2] 결과
[3] 코드
# 재귀함수
def draw_star(n):
global Map
if n == 3 :
Map[0][:] = Map[2][:] = [1] * 3
Map[1][:] = [1, 0, 1]
return
a = n//3
draw_star(n//3)
for i in range(3):
for j in range(3):
if i == 1 and j == 1 :
continue
for k in range(a):
Map[a*i+k][a*j:a*(j+1)] = Map[k][:a]
# 3의 거듭제곱수 입력
N = int(input())
Map = [[ 0 for i in range(N)] for i in range(N)]
draw_star(N)
# 별찍기 for문
for i in Map:
for j in i :
if j:
print('*', end='')
else :
print(' ', end='')
print()
[4] 해설
N = int(input()) 을 통해 입력할 3의 거듭제곱 수를 받는다.
Map = [[0 for i in range(N)] for i in range(N)] 을 통해 N개의 행과 N개의 열을 0으로 초기화를 시킨다.
N이 3일 경우, draw_star() 재귀 함수를 부르며, 바로 Map 리스트 변수에 [[1,1,1],[1,0,1],[1,1,1]] 값을 설정해주고 재귀 함수를 나온 후 for 문을 통해 별찍기를 수행한다. ( 1은 * 을 의미하고 0은 공백을 의미한다.)
N이 3이 아닐 경우( ex: 9 ), a = 9 // 3 ( a = 3 ) 값을 주고, 다시 draw_star(n//3) 을 통해 재귀함수를 불러 반복해서 찍는 N=3인 기본적인 형태를 Map 리스트 변수에 [[1,1,1],[1,0,1],[1,1,1]] 값을 저장한다.
새로 부른 재귀 함수가 return하게 되고 끝이 나면 a=3인 코드로 다시 돌아가 아래의 3중 for문을 실행하게 된다.
N=9일 때, (0~2) (3~5) (6~8) 3개의 열씩 3개 항이 차례대로 가운데에 있는 값을 0으로 주고 나머지는 1을 준다.
N이 9일 때 정 가운데는 공백으로 비워둬야 하기에 if (i==1 and j==1) continue 를 통해 그대로 초기에 설정한 0을 그대로 저장하게 하여 재귀 함수 밖에 있는 별 찍기 for 문에서 공백을 찍게끔한다.
반응형
'Algorithm > Boj' 카테고리의 다른 글
[백준] 1388번 : 바닥 장식 - python 풀이 (0) | 2023.01.15 |
---|---|
백준 2798 파이썬 - 블랙 (0) | 2022.05.05 |
백준 1002 파이썬 터렛 (0) | 2022.02.07 |
백준 4948 파이썬 - '에라토스테네스 체' (0) | 2022.02.07 |
백준 2869 파이썬 / 달팽이는 올라가고 싶다 (0) | 2022.02.05 |