1) 입력값이 3일 때
2) 입력값이 9일 때
3) 입력값이 27일 때
=> 한 칸을 차지하는 아기가 계속해서 누적돼서 전달됨을 캐치해야 한다
(1) 처음 암기 & 쳤을 때 오류
def star(n:int, arr:list) -> list:
accum =[]
if n==3 :
return arr
else :
for i in arr:
accum.append(i)
for i in arr:
accum.append(i)
for i in arr:
accum.append(i)
return (n//3, accum)
if __name__ == "__main__" :
n=int(input())
defautvalue = ["***", "* *", "***"]
res = star(n, defautvalue)
for i in res :
print(i)
=> append(i) 가 아니고 append(i*3)
로 늘려줘야 한다
(2)
def star(n:int, arr:list) :
accum =[]
if n==3 :
return arr
else :
for i in arr:
accum.append(i*3)
for i in arr:
accum.append(i+(' ')*(n//3)+i)
for i in arr:
accum.append(i*3)
return (n//3, accum)
if __name__ == "__main__" :
n=int(input())
defautvalue = ["***", "* *", "***"]
res = star(n, defautvalue)
if n==3 :
for i in res :
print(i)
else :
for i in res[1] :
print(i)
=> 여기서 내가 n을 잘근잘근..자르고 있었삼 ㅠㅠ
=> 이 부분을 len(arr)로 판단해줘야지 n을 3으로 갱신시키고 있으면 안되는 거였삼~
------> 엥 근데 위에거 고쳐도 똑같은디!?
=> 어디서 왜 반환처리를 해버리는고지!?!?!?
def star(n:int, xr:list)->list :
accum =[]
if n == 3 :
return xr
else :
for i in xr:
accum.append(i*3)
for i in xr:
accum.append(i+(' ')*(len(xr))+i)
for i in xr:
accum.append(i*3)
return (n//3, accum)
if __name__ == "__main__" :
n=int(input())
defautvalue = ['***', '* *', '***']
res = star(n, defautvalue)
if n==3 :
for i in res :
print(i)
else :
print(res)
for i in range(res[0]) :
for j in res[1] :
print(j)
(1) 안되던 코드
k=int(input())
def star(n) :
if n==0 :
return("***\n")
if n==1 :
return ("* *\n")
if n==2 :
return("***\n")
return star(n-1)+star(n-2)+star(n-3)
print(star(k))
(2) 다른 분의 설명 참고
출처1: https://study-all-night.tistory.com/5
출처2: https://imgzon.tistory.com/37
def star(n: int, x: list)-> list:
out = [] # 한번 처리한 값
if n == 3:
return x
else:
for i in x: # 위에 처음 3개의 구역
out.append(i*3)
for i in x: # 가운데 3개의 구역 (중앙 비어있음)
out.append(i+' '*len(x)+i)
for i in x: # 마지막 3개의 구역
out.append(i*3)
return star(n//3, out)
if __name__ == "__main__":
n = int(input())
first = ['***', '* *', '***']
final = star(n, first)
for i in final:
print(i)
***
* *
***
라는 형태가 계속해서 누적된다는 포인트를 캐치했으면 좋았을텐데
이를 캐치하지 못했던 점이 아쉽다.
이 누적되는 아이가 다음 순서의 한칸을 차지하는 것이기 때문에 이 친구도 재귀함수에 같이 넘겨주어야 하는 것이다.
자료형 : 변수명
으로 선언하면 넘기기 가능이다1)
https://hyoje420.tistory.com/45
https://dojang.io/mod/page/view.php?id=2448
if __name__ == "__main__" 의 의미
=> 'name이라는 변수의 값이 main이라면 아래의 코드를 실행하라.'
- if name=="main"이라는 조건문을 넣어주고 그 아래는 직접 실행시켰을 때만 실행되길 원하는 코드들을 넣어주는 것
==>if __name__ == '__main__'
: #프로그램의 시작점일 때만 아래 코드 실행
2)
아래 설명 출처 : https://okdolmin.tistory.com/26
def funName(x: str, y: float = 6.5) -> int:
return x + y
value = funName(3)
print(value)
- x : str 콜론(:) 다음에 적어주는 것은 매개변수에 할당되는 형식을 말한다.
- y : float = 6.5 초기값을 콜론다음에 해당 형식 뒤에 = 하고 값을 적어줄 수 있다. (변수 : 형식 = 기본값)
-> int : 이거의 뜻은 이 함수가 반환해주는 값의 형식이 int라는 것을 말한다!