책너두 - 알고리즘 챌린지[15/20]

Moon·2023년 7월 31일
0
post-thumbnail

오늘의 문제 : 별찍기


이상하게 별찍기 문제는 실버난이도도 어렵다. 나는 텍스트가 더 눈에 잘 들어오는 타입이다 보니 그림만 보면 규칙을 찾는데 한참 걸린다.. 꾸준히 푼다고 푸는데도 익숙해지지 않아 어렵다.

그림 문제를 보면 '재귀'로 풀어야겠단 건 알면서도, 규칙을 찾는데 오래 걸려 어렵다

다행히 이번 문제는 재귀를 사용하지 않고 각 구간의 크기를 구하면 풀 수 있는 문제였다.


import sys

n = int(input())

tmp = 1

for i in range(1, n+1) :
    if n == 1 :
        print("*")
        break

    if i == 1 :
        print("* " * (i-1) + "*" * ((n*4) - ((i*4) - 1)))
    elif i < 3 :
        print("* " * (i-1) + "*" * ((n*4) - ((i*4) - 3)))
    else :
        print("* " * (i-1) + "*" * ((n*4) - ((i*4) - 3)) + " *" * tmp)
        tmp += 1

    if i == 1 :
        print("*")
    elif i == n :
        print("*" + " *" * ((n*2) - 2))
    else :
        print("* " * i + " " * (((n-i) * 4) - 1) + " *" * (i-1))

if n != 1 :
    print("*" + " *" * ((n*2) - 2))

for j in range(n-1, 0, -1) :
    print("* " * j + " " * (((n-j) * 4) - 3) + " *" * j) 
    print("* " * (j-1) + "*" * (((n-j) * 4) + 1) + " *" * (j-1)) 
    

이렇게 깔끔하게도 풀 수 있구나

n = int(input())
print("*"*(4*n-3))
for i in range(n-1):
    print(("* "*(i+1)+" "*(4*n-4*i-5)+" *"*i).strip())
    print("* "*(i+1)+"*"*(4*n-4*i-5)+" *"*i)
if n != 1:
    print("* "*(2*n-1))
    print("* "*(2*n-1))
for i in range(n-1):
    print("* "*(n-1-i)+" "*(4*i+1)+" *"*(n-1-i))
    print("* "*(n-2-i)+"*"*(4*i+5)+" *"*(n-2-i))
profile
안녕하세요. Moon입니다!

1개의 댓글

comment-user-thumbnail
2023년 7월 31일

이런 유용한 정보를 나눠주셔서 감사합니다.

답글 달기