BAEKJOON-2447 : 별찍기-10
BEAKJOON-1011 : 별찍기-10

오랜만에 별찍기 문제를 푼다. 거의 .. 4년만..?
이 문제는 재귀마다 공간을 가로, 세로로 3칸씩 나누면 된다.
그래서 입력도 3의 지수가 입력된다. 즉 어떤 입력된 값이라도 3칸으로 나눌 수 있다는 소리.
문제에서 길이가 3일때의 패턴을 알려줬으므로
재귀를 길이가 3일때까지 나누고, 중앙은 공백으로 채우면된다.
종료조건으로 길이가 3일때 패턴을 출력해주면 된다.
코드
def starfilled(arr, n, y):
if n == 3:
arr[y] += '***'
arr[y+1] += '* *'
arr[y+2] += '***'
return
for i in range(3):
for j in range(3):
if i == 1 and j == 1:
for k in range(y+n//3, y+n//3+n//3):
arr[k] += ' '*(n//3)
else:
starfilled(arr, n//3, y+(n//3)*i)
n = int(input())
arr = ['' for _ in range(n)]
starfilled(arr, n, 0)
for i in range(n):
print(arr[i])
사실 위 코드에서 중복되는 경우가 있다.
n이 3일때 조건에서 보면 arr[y+1] += ‘* *‘처럼 중앙에 공백을 넣는데,
밑의 중첩 반복분(for k in range()) 에서도 중앙 공백을 넣어주는 부분이 겹친다. (실제로 값을 중복으로 넣는 것은 아님)
따라서 아래와 같이 if n==1: 로 바꿔주면 코드가 깔끔하지만,
이 코드는 길이가 1일때까지 재귀가 돌아서 위 코드보다 3배의 실행시간이 차이난다.
if n == 1:
arr[y] += '*'
return
오랜만에 별찍기 코딩을 해서 재밌었다😁
댓글남기기