본문 바로가기
Problem Solving/Recursion

[재귀] 백준 2447번 : 별 찍기 - 10 / 실버1

by ggyongi 2021. 9. 30.
반응형

https://www.acmicpc.net/problem/2447

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

 

생각보다 어렵다...

연습이 필요하다.. 이런 건 쉽게 풀어야 한다.

n = int(input())
table = [['*' for _ in range(n)] for _ in range(n)]
def draw(num, x, y):
    next = num//3
    if num<3:
        return

    for i in range(num):
        for j in range(num):
            if i//next == 1 and j//next == 1:
                table[i+x][j+y] = ' '
            elif i%next==0 and j%next == 0:
                draw(next, x+ i, y+ j)


draw(n, 0, 0)
for i in range(n):
    print(''.join(table[i]))

 

개선 코드 - 런타임을 4배정도 단축시켰다.

n = int(input())
table = [[' ' for _ in range(n)] for _ in range(n)]

def draw(num, x, y):
    if num == 3:
        table[x][y:y + 3] = ['*', '*', '*']
        table[x+1][y:y + 3] = ['*', ' ', '*']
        table[x+2][y:y + 3] = ['*', '*', '*']
        return

    next = num//3
    for i in range(3):
        for j in range(3):
            if i == 1 and j == 1:
                continue
            else:
                draw(next, x + next*i, y + next*j)

draw(n, 0, 0)
for i in range(n):
    print(''.join(table[i]))

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글