별 찍기 - 11

https://www.acmicpc.net/problem/2448


풀이

입력값이 들어오면 적합한 행과 열을 가진 2차원 배열을 생성하고 공백을 채워가는 방식을 사용했다.
입력값으로 들어올 수 있는 값은 3*2^k(0<=k<=10)이고 행(r)은 항상 n개이고 열(c)은 3일 경우 5개이고 나머지는 2*(n-1)개인 성질이 있다.

먼저 삼각형 외곽 부분을 공백으로 채운다.
최상단의 왼쪽 부분은 0~n-1, 오른쪽 부분은 n~c이 공백이다.
아래로 내려가면서 왼쪽 부분은 마지막 지점이 하나씩 줄어들고 오른쪽 부분은 시작 지점이 하나씩 늘어난다.

이후 삼각형 내의 공백 부분을 채워야 한다.
삼각형 내의 공백은 삼각형의 중심부가 공백인 것을 알 수 있다.
그리고 삼각형 중심부 외 나머지 부분 삼각형들도 중심부가 공백이다.
이런 성질은 재귀 함수를 통해 구현한다.
삼각형들의 중심부의 시작 지점(i, j)은 i % n == n / 2, j % n == n / 2가 되는 지점이다.
(n이 3일 경우에는 j % n == 2인 지점이다.)
시작 지점을 찾았으면 행(x)은 i부터 i + n / 2개 만큼
열(y)은 j + x - i부터 j + n - 1개 만큼 공백으로 채우며 다.
(n이 3일 경우에는 열은 1개 만큼 공백으로 채운다.)
이런 과정이 끝나면 입력값의 절반으로 함수를 다시 돌려 입력값이 1보다 클때까지 반복한다.