728x90
import math
n=int(input()) 

def star(k):
    a=int(k/3)
    if k==6: 
        return ['  *  ',' * * ','*****']
    arr=star(k//2) 
    stars=[]
    for i in arr: 
        
        stars.append(' '*(3*(2**((int(math.log2(a)))-2)))+i+' '*(3*(2**((int(math.log2(a)))-2)))) 
    for i in arr:
        stars.append(i+' '+i) 
  
    return stars 
        


print("\n".join(star(n*2)))

 

후 마지막에 저 수식을 어케짤까 하다가 도저히 로그 쓰는거 말고는 생각이 안나서 math를 import해버렸다...

더 효율적인지 아닌지는 모르겠지만 일단 돌아는 감.

 

2447번 코드에서 살짝 수정만 한것. 

 

일단 알고리즘은 평범한 재귀함수임. 

어떤 함수냐면 일단 기본 베이스가 되는 삼각형을 만들고, 그 삼각형으로 프랙탈마냥 계속 만들어내는거

근데 만드는 과정에서 좀 수학적인게 필요했음 (수1 수열에 해당하는 부분인듯)

 

코드는 뭐 12넣어보고 24넣어보고 그러다보면 이해 가능할거고

 

중간에 몇번 에러떴는데 이유:

 

1. 공백 수를 정하는 코드를 짜야하는데, 6은 1, 12는 2, 24는 3 이런식으로 매칭시키는게 필요했음. 

무지성으로 다 6으로 나눴다가 24나누기 6을 3이 아니라 4라는걸 깨달음. 어쩐지 공백이 12더라 ㅅ발

 

2. log를 쓸때는 차피 int만 들어간다는걸 알아도 컴퓨터는 모르기 때문에 int형으로 바꿔줘야함. (당연하지만 실수함)

 

 

728x90

+ Recent posts