(실버1) 2447 별찍기-10

  • 나의 코드
def func(x, y) :
    # 폭
    dif = x[1]- x[0] 
    # 다음꺼 폭
    dif_3 = dif//3

    # 최소함수 : 폭이 3일 때 모양 넣기
    if dif_3 == 1 :
        for tmp_y in range(y[0],y[1]) :
            for tmp_x in range(x[0], x[1]) :
                result[tmp_y][tmp_x] = True
        result[y[0]+1][x[0]+1] = False
        return

    # 9군데 중 색칠이 8군데라 8개
    func((x[0],x[0]+dif_3), (y[0],y[0]+dif_3))
    func((x[0]+dif_3,x[0]+dif_3*2), (y[0],y[0]+dif_3))
    func((x[0]+dif_3*2,x[0]+dif_3*3), (y[0],y[0]+dif_3))

    func((x[0],x[0]+dif_3), (y[0]+dif_3,y[0]+dif_3*2))
    func((x[0]+dif_3*2,x[0]+dif_3*3), (y[0]+dif_3,y[0]+dif_3*2))

    func((x[0],x[0]+dif_3), (y[0]+dif_3*2,y[0]+dif_3*3))
    func((x[0]+dif_3,x[0]+dif_3*2), (y[0]+dif_3*2,y[0]+dif_3*3))
    func((x[0]+dif_3*2,x[0]+dif_3*3), (y[0]+dif_3*2,y[0]+dif_3*3))

# N 입력받기
N = int(input())
# 전부 False인 N*N 수열 생성
result = [[False]*N for _ in range(N)]
# 재귀 돌리기
func((0,N),(0,N))

# 별 출력
for y in range(N) :
    for x in range(N) :
        if result[y][x] :
            print("*", end="")  
        else :
            print(" ", end="")
    print("")
  • 남의 코드
def stars(n):
    # 결과물 초기화
    m = []
    # for 문 : n 길이의 3배 실행
    for i in range(3 * len(n)):
        # 중간 빈 곳 있는 가운데 줄
        if i // len(n) == 1:
            m.append(n[i % len(n)] + " " * len(n) + n[i % len(n)])
        # 다른 줄 
        else:
            m.append(n[i % len(n)] * 3)
    return list(m)

# 패턴
star = ["***", "* *", "***"]
# 입력받기
N = int(input())
# 횟수 구하기
j = 0
while N != 3:
    N = N // 3
    j += 1
# j 번 패턴을 넣고 출력받음    
for i in range(j):
    star = stars(star)
# 패턴을 줄별로 출력
for i in star:
    print(i)

좋은 웹페이지 즐겨찾기