반응형
문제
https://www.acmicpc.net/problem/2447
처음 봤을때는 굉장히 난해했다. 규칙을 알아도 출력하기 좀 까다로웠다.
여러 방법이 있지만 재귀를 사용하는 방법으로 구현할려고 노력했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | n = int(input()) list = [['*'] * n for i in range(n)] #출력할 배열 초기화 모두 *로 채워주고 빈칸이 들어갈부분은 밑에서바꿔준다. def starprint(n,list): # if n<3: #1일때는 바로 내보내어 *이 출력하게만든다. return if n == 3: #3일때 빈칸은 직접 채워준다. list[1][1] = " " else: starprint(n//3,list) #재귀를 통해 이전리스트를 완성시키고 넘겨준다. for i in range(n // 3): #빈칸들이 일정한 패턴으로 늘어나는것을 이용한다. for j in range(n // 3): if list[i][j] == " ": #하나의 빈칸에서 파생되는 빈칸들 list[i][j+n//3]=" " list[i][j + 2*n//3] = " " list[i+n//3][j] = " " list[i+n//3][j+2*n//3]=" " list[i+2*n//3][j]=" " list[i+2*n//3][j+n//3]=" " list[i+2*n//3][j+2*n//3]=" " for i in range(n): #가운데 부분은 직접 비워줬다. for j in range(n): if n//3<=i<n//3*2 and n//3<=j<n//3*2: list[i][j]=" " return list starprint(n,list) #함수실행 for i in range(n): for j in range(n): print(list[i][j], end="") print() | cs |
반응형
'알고리즘(python) > 기본' 카테고리의 다른 글
[Python]동적계획법 백준 1003 (0) | 2020.01.07 |
---|---|
[Python]동적계획법 백준 2748 (0) | 2020.01.07 |
[Python]재귀 백준 11729 (0) | 2019.12.18 |
[Python]재귀 백준 10870 (0) | 2019.12.17 |
[Python]재귀 백준 10872 (0) | 2019.12.17 |
최근댓글