백준 - 2448 별 찍기 - 11
풀이
- 배열의 전체 크기를 정해줌
- 최소 단위 삼각형이 들어갈 위치
map[row][col]
을 지정해서 *
저장
- 그 다음 들어가야할 삼각형의 위치를 분할해서 지정
partition(row
, col
, n
)
➡️ partition(row
, col
, n / 2
)
➡️ partition(row + n / 2
, col - n / 2
, n / 2
)
➡️ partition(row + n / 2
, col + n / 2
, n / 2
)
n = 3
map[3][5] -> map[n][n*2-1]
01234
0 [--*--] -> map[row][col]
1 [-*-*-] -> map[row+1][col-1], map[row+1][col+1]
2 [*****] -> map[row+2][col-2], map[row+2][col-1], map[row+2][col], map[row+2][col+1], map[row+2][col+2]
==========================================
n = 6 -> 크기가 3보다 큼 -> 2로 나눠서 분할
map[6][11]
01234567890
0 [-----------]
1 [-----------]
2 [-----------]
3 [-----------]
4 [-----------]
5 [-----------]
map[0][5], size = 3 기준 재귀함수
01234567890
0 [-----*-----]
1 [----*-*----]
2 [---*****---]
3 [-----------]
4 [-----------]
5 [-----------]
map[3][2], size = 6 기준 재귀함수
01234567890
0 [-----*-----]
1 [----*-*----]
2 [---*****---]
3 [--*--------]
4 [-*-*-------]
5 [*****------]
map[3][8], size = 6 기준 재귀함수
01234567890
0 [-----*-----]
1 [----*-*----]
2 [---*****---]
3 [--*-----*--]
4 [-*-*---*-*-]
5 [*****-*****]
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class PrintStar {
static String[][] map;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int m = n * 2 - 1;
map = new String[n][m];
for (int i = 0; i < n; i++) Arrays.fill(map[i], " ");
partition(0, n - 1, n);
for (int i = 0; i < n; i++) {
System.out.println(Arrays.toString(map[i]).replaceAll(", ", "").substring(1, m + 1));
}
}
private static void partition(int row, int col, int n) {
if (n == 3) {
map[row][col] = "*";
map[row + 1][col - 1] = map[row + 1][col + 1] = "*";
map[row + 2][col - 2] = map[row + 2][col - 1] = map[row + 2][col] = map[row + 2][col + 1] = map[row + 2][col + 2] = "*";
}
else {
int div = n / 2;
partition(row, col, div);
partition(row + div, col - div, div);
partition(row + div, col + div, div);
}
}
}