즐거운 PS 👩‍💻🥰

[백준-파이썬] 16505번: 별

dalin❤️ 2021. 10. 8. 10:29

백준 16505번

첫번째 시도 => 실패 😢

재귀를 사용해서 풀었다 !
아래와 같이 풀었는데, 형태는 비슷한데 답은 틀렸다.
'출력형식이 잘못되었습니다'라고 나왔다.
문제에 <각 줄 끝에는 필요없는 공백을 출력하지 않는다.>라고 써있는데, 이 부분을 만족하지 못한 것 같다.

def triangle(ans,n,m):
    if n==1:
        return '*'
    else:
        tmp=list(triangle(ans,n-1,m-1).split('\n'))
        #print(tmp)
        for i in range(len(tmp)):
            ans+=tmp[i]*2
            ans+=' '*(2**m-len(tmp[i]*2))
            ans+='\n'


        #ans=ans[:-1]
        for i in range(len(tmp)-1):
            ans+=tmp[i]
            ans += ' ' * (2 ** m - len(tmp[i]))
            ans+='\n'
        ans+=tmp[-1]
        ans+=' '*(2**m-len(tmp[-1]))
        return ans

if __name__=="__main__":
    n=int(input())
    ans=triangle('',n+1,n)
    #print("======================================================")
    print(ans)

다시 풀어보자...

두번째 시도 => 성공 🥳

import sys
import math

#sys.stdin=open('input.txt','r')

def triangle(ans,n,m):
    if n==1:
        return '*'
    else:
        tmp=list(triangle(ans,n-1,m-1).split('\n'))
        #print(tmp)
        for i in range(len(tmp)):
            ans+=tmp[i]*2
            ans+=' '*(2**m-len(tmp[i]*2))
            ans+='\n'


        #ans=ans[:-1]
        for i in range(len(tmp)-1):
            ans+=tmp[i]
            ans += ' ' * (2 ** m - len(tmp[i]))
            ans+='\n'
        ans+=tmp[-1]
        ans+=' '*(2**m-len(tmp[-1]))
        return ans

if __name__=="__main__":
    n=int(input())
    ans=triangle('',n+1,n)
    for i in range(0,2**(n*2),(2**n+1)):
        ans1=ans[i:i+2**n]
        start=-1
        for s in range(len(ans1)-1,-1,-1):
            if ans1[s]=='*':
                start=s
                break
        for s in range(start+1):
            print(ans1[s],end='')
        print()

혼자 하다가 안되어서ㅠㅠ 친구랑 고민하면서 풀었다!
triangle 함수 부분은 같고, if __name__=="__main__":부분을 바꿨다.
무슨 내용이냐면..
한줄 한줄 돌면서, 한 글자씩 거꾸로 읽어가면서, *을 만나면 그 위치를 체크한다.
그 후에 한줄 한줄 그 위치까지 하나씩 출력한다.

728x90