첫번째 시도 => 실패 😢
재귀를 사용해서 풀었다 !
아래와 같이 풀었는데, 형태는 비슷한데 답은 틀렸다.
'출력형식이 잘못되었습니다'라고 나왔다.
문제에 <각 줄 끝에는 필요없는 공백을 출력하지 않는다.>라고 써있는데, 이 부분을 만족하지 못한 것 같다.
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
'즐거운 PS 👩💻🥰' 카테고리의 다른 글
[백준-파이썬] 2805번: 나무 자르기 (0) | 2021.10.08 |
---|---|
[백준-파이썬] 4454번: 상근이의 여자친구 (0) | 2021.10.08 |
[백준-파이썬] 2667번: 단지번호 붙이기 (0) | 2021.10.08 |
[백준-파이썬] 1012번: 유기농 배추 (0) | 2021.10.08 |
[백준-파이썬] 2468: 안전 영역 (0) | 2021.10.08 |