반응형
문제
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
= 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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기