728x90
분할 정복 문제입니다.
27을 입력했을 때 오른쪽과 같은 규칙의 별을 찍어야 합니다.
1일 경우
*
3일 경우
***
* *
***
9일 경우
*********
* ** ** *
*********
*** ***
* * * *
*** ***
*********
* ** ** *
*********
규칙을 보면 가운데가 뚫려있는 사각형입니다.
입력받은 숫자를 3으로 나누면서 분할을 진행합니다.
한번 분할 할 때 9개의 조각으로 나누어집니다.
이 때 가운데 조각은 처리를 해주지 않았습니다. (공백 처리)
조각이 1일 경우 *로 처리해주었습니다.
위의 과정을 반복하여 모두 나누었다면 처리된 결과값들을 출력해주었습니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static char[][] map;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
map = new char[n][n];
for(int i=0; i<n; ++i) {
for(int j=0; j<n;++j) {
map[i][j] = ' ';
}
}
recu(0, 0, n);
for(int i=0; i<n; ++i) {
for(int j=0; j<n;++j) {
bw.write(map[i][j]);
}
bw.write("\n");
}
bw.close();
}
public static void recu(int y, int x, int n) {
if (n == 1) {
map[y][x] = '*';
return;
}
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (i == 1 && j == 1) {
continue;
}
recu(y + (i * n / 3), x + (j * n / 3), n / 3);
}
}
}
}
'알고리즘' 카테고리의 다른 글
[Java] 백준 17179번 케이크 자르기 (0) | 2023.03.27 |
---|---|
[Java] 프로그래머스 - 징검다리 건너기 (0) | 2023.03.26 |
[Java] 백준 1240번 노드사이의 거리 (0) | 2023.03.21 |
[Java] 백준 1477번 휴게소 세우기 (1) | 2023.03.20 |
[Java] 백준 17268번 미팅의 저주 (1) | 2023.03.14 |