오보에블로그

2447_별찍기 - 10 본문

STEADYSTUDY/Etc

2447_별찍기 - 10

(OBO) 2018. 2. 6. 12:39
728x90

# 별찍기 - 10 성공
# 시간 제한     메모리 제한     제출     정답     맞은 사람     정답 비율
# 1 초     128 MB     2360     1171     876     50.057%
# 문제

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

# 첫째 줄에 N이 주어진다. N은 항상 3의 제곱꼴인 수이다. (1, 3, 9, 27, ...) (N=3^k, 0<=k<8)
# 출력

# 첫째 줄부터 N번째 줄까지 별을 출력한다.
# 예제 입력

# 27

# 예제 출력

# ***************************
# * ** ** ** ** ** ** ** ** *
# ***************************
# ***   ******   ******   ***
# * *   * ** *   * ** *   * *
# ***   ******   ******   ***
# ***************************
# * ** ** ** ** ** ** ** ** *
# ***************************
# *********         *********
# * ** ** *         * ** ** *
# *********         *********
# ***   ***         ***   ***
# * *   * *         * *   * *
# ***   ***         ***   ***
# *********         *********
# * ** ** *         * ** ** *
# *********         *********
# ***************************
# * ** ** ** ** ** ** ** ** *
# ***************************
# ***   ******   ******   ***
# * *   * ** *   * ** *   * *
# ***   ******   ******   ***
# ***************************
# * ** ** ** ** ** ** ** ** *
# ***************************

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
35
36
37
38
def star(i_strt,i_end,j_strt, j_end, star_list):
    for i in range(i_strt+ (i_end-i_strt)//3-1,i_strt + 2*(i_end-i_strt)//3):
        for j in range(j_strt + (j_end-j_strt)//3 - 1,j_strt + 2*(j_end-j_strt)//3):
            if(i_strt+ (i_end-i_strt)//3 - 1< i < i_strt + 2*(i_end-i_strt)//3 and j_strt + (j_end-j_strt)//3 - 1 < j < j_strt + 2*(j_end-j_strt)//3  ):
                star_list[i][j] = 1
 
    if((i_end - i_strt > 3or (j_end - j_strt > 3)):
        star_list = star(i_strt ,i_strt+ (i_end-i_strt)//3, j_strt, j_strt + (j_end-j_strt)//3,star_list)
        star_list = star(i_strt+ (i_end-i_strt)//3 ,i_strt+ 2*(i_end-i_strt)//3, j_strt, j_strt + (j_end-j_strt)//3,star_list)
        star_list = star(i_strt+ 2*(i_end-i_strt)//3 , i_end,j_strt, j_strt + (j_end-j_strt)//3, star_list)
 
        star_list = star(i_strt ,i_strt+ (i_end-i_strt)//3, j_strt + (j_end-j_strt)//3 , j_strt + 2*(j_end-j_strt)//3,star_list)
        star_list = star(i_strt+ 2*(i_end-i_strt)//3 ,i_end, j_strt + (j_end-j_strt)//3, j_strt + 2*(j_end-j_strt)//3,star_list)
 
        star_list = star(i_strt ,i_strt+ (i_end-i_strt)//3, j_strt + 2*(j_end-j_strt)//3, j_end,star_list)
        star_list = star(i_strt+ (i_end-i_strt)//3 ,i_strt+ 2*(i_end-i_strt)//3, j_strt + 2*(j_end-j_strt)//3, j_end,star_list)
        star_list = star(i_strt+ 2*(i_end-i_strt)//3 , i_end,j_strt + 2*(j_end-j_strt)//3,j_end,star_list)
 
    return star_list
 
 
 
 
 
= int(input())
matrix = [[0]*for i in range(n)]
 
matrix = star(0,n,0,n,matrix)
 
for i in range(n):
    for j in range(n):
        if(matrix[i][j]==0):
            print("*",end = "")
        else:
            print(" ",end = "")
    print("")
 
 
cs



예~~~~ 어려워 보여서 눈으로만 보고 있었던 문제를 드디어 풀었습니다~~!! 

star(보려는 y좌표의 처음 자리, 보려는 y좌표의 마지막 자리,  보려는 x좌표의 처음 자리, 보려는 x좌표의 마지막 자리, 별자리리스트 ) 는 가운데에만 구멍( 1 처리) 을 뚫어 주고 재귀로 넘겨 버리는 함수 입니다~

728x90

'STEADYSTUDY > Etc' 카테고리의 다른 글

[Python3] 마우스 입력 좌표 확인 하기  (0) 2020.05.25
[Python3] 프로그램 축소기  (0) 2019.07.08
자바실습 Week10 - FILE IO  (0) 2017.11.22
Collection & Generics  (0) 2017.11.16
추상클래스 (abstract class) 사용  (0) 2017.11.08