https://www.acmicpc.net/problem/2448
별의 패턴을 유추하여 별찍기를 하는 문제이다.
입력은 3 * (2^n)의 형태로 주어진다.
별 찍기의 패턴을 보면, 행은 N개로 이루어져 있고 열은 2*n-1개로 이루어져 있다. 그리고 3의 배수로 이루어져 있다.
위와 같은 과정으로 재귀호출을 3번씩 수행하며 n==3일때 별을 그리도록 하여 해결하였다.
별을 바로 프린트 하는게 아닌, 배열을 선언하여 저장하는 방식으로 그리고 마지막에 최종으로 프린트 하도록 구현하였다.
import sys
input = sys.stdin.readline
n = int(input())
arr = [[" "]* (2*n-1) for _ in range(n)]
def recursive(x, y, n):
if n == 3:
arr[x][y] = "*"
arr[x+1][y-1] = arr[x+1][y+1] = "*"
for i in range(5):
arr[x+2][y-2 + i] = "*"
return
next_n = n//2
recursive(x, y, next_n)
recursive(x + next_n, y - (next_n), next_n)
recursive(x + next_n, y + (next_n), next_n)
recursive(0, (2*n-1)//2, n)
for i in range(n):
print("".join(arr[i]))