๐๋ฌธ์
์ฌ๊ท์ ์ธ ํจํด์ผ๋ก ๋ณ์ ์ฐ์ด ๋ณด์. N์ด 3์ ๊ฑฐ๋ญ์ ๊ณฑ(3, 9, 27, ...)์ด๋ผ๊ณ ํ ๋, ํฌ๊ธฐ N์ ํจํด์ N×N ์ ์ฌ๊ฐํ ๋ชจ์์ด๋ค.
ํฌ๊ธฐ 3์ ํจํด์ ๊ฐ์ด๋ฐ์ ๊ณต๋ฐฑ์ด ์๊ณ , ๊ฐ์ด๋ฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ์นธ์ ๋ณ์ด ํ๋์ฉ ์๋ ํจํด์ด๋ค.
***
* *
***
N์ด 3๋ณด๋ค ํด ๊ฒฝ์ฐ, ํฌ๊ธฐ N์ ํจํด์ ๊ณต๋ฐฑ์ผ๋ก ์ฑ์์ง ๊ฐ์ด๋ฐ์ (N/3)×(N/3) ์ ์ฌ๊ฐํ์ ํฌ๊ธฐ N/3์ ํจํด์ผ๋ก ๋๋ฌ์ผ ํํ์ด๋ค. ์๋ฅผ ๋ค์ด ํฌ๊ธฐ 27์ ํจํด์ ์์ ์ถ๋ ฅ 1๊ณผ ๊ฐ๋ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. N์ 3์ ๊ฑฐ๋ญ์ ๊ณฑ์ด๋ค. ์ฆ ์ด๋ค ์ ์ k์ ๋ํด N=3k์ด๋ฉฐ, ์ด๋ 1 ≤ k < 8์ด๋ค.
๐ฑ๐ค์ถ๋ ฅ
์ฒซ์งธ ์ค๋ถํฐ N๋ฒ์งธ ์ค๊น์ง ๋ณ์ ์ถ๋ ฅํ๋ค.
๐ฌ ์์ ์ ๋ ฅ
27
๐ฌ ์์ ์ถ๋ ฅ
***************************
* ** ** ** ** ** ** ** ** *
***************************
*** ****** ****** ***
* * * ** * * ** * * *
*** ****** ****** ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
********* *********
* ** ** * * ** ** *
********* *********
*** *** *** ***
* * * * * * * *
*** *** *** ***
********* *********
* ** ** * * ** ** *
********* *********
***************************
* ** ** ** ** ** ** ** ** *
***************************
*** ****** ****** ***
* * * ** * * ** * * *
*** ****** ****** ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
๐ ๋์ ํ์ด
๋จผ์ ์ฒ์ ๋ณ์ ํจํด์ ์ฐพ์ ๋ณด๋๋ก ํ์.
๊ฐ๋ก ์ธ๋ก๊ฐ 9์ด๊ณ , ๊ฐ์ด๋ฐ๊ฐ ๋น์ด์๋ 9X9 ๋ณ์ ํจํด์ด ๊ณ์ ๋ฐ๋ณต๋๋ ํจํด์ด๋ค.
์ด ํจํด์ ๋ค์ ํ๋ฒ ๋ถํ ํด๋ณด๋ฉด..
์ด๋ ๊ฒ ๊ฐ์ด๋ฐ๊ฐ ๋น์ด์๋ 3X3 ํจํด์ด ๋ฐ๋ณต์ด ๋๋ค.
์ธ๋ฑ์ค๋ฅผ ํ์ํด๋ณด๋ฉด,
๋ถํ ๋ ํจํด์ ์ธ๋ฑ์ค๋ฅผ ๋์ดํด๋ณด๋ฉด , (0,0) ์ผ๋ก ์์ํ๋ ๊ธธ์ด๊ฐ 27์ธ ๋ณ์ ํจํด์ด ๋ค์๊ณผ ๊ฐ์ด ๋ถํ ์ด ๋๋ค.
๊ธธ์ด๊ฐ 27์ด๊ณ (0,0)์ผ๋ก ์์ํ๋ ๋ณ์ ํจํด์ด ๋ค์๊ณผ ๊ฐ์ด ๋ถํ ์ด ๋๋ค.
1)startX: 0 , startY: 0 , len: 9
2)startX: 0 , startY: 9 , len: 9
3)startX: 0 , startY: 18 , len: 9
4)startX: 9 , startY: 0 , len: 9
5)startX: 9 , startY: 9 , len: 9
6)startX: 9 , startY: 18 , len: 9
7)startX: 18 , startY: 0 , len: 9
8)startX: 18 , startY: 9 , len: 9
9)startX: 18 , startY: 18 , len: 9
์ด๋ ๊ฒ ์ด 9๊ฐ๋ก ๋ถํ ์ด ๋๋ค.
์ฌ๊ธฐ์ ๋ ๊ธธ์ด๊ฐ 9์ธ ํจํด์ ๊ธธ์ด๊ฐ 3์ธ ํจํด์ผ๋ก ๋ถํ ์ํฌ ์ ์๋ค.
๊ธธ์ด๊ฐ 3์ธ ํจํด์ผ๋ก ๋ถํ ์ํค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋๋ค.1)startX: 0 , startY: 0 , len: 3
2)startX: 0 , startY: 3 , len: 3
3)startX: 0 , startY: 6 , len: 3
4)startX: 3 , startY: 0 , len: 3
5)startX: 3 , startY: 3 , len: 3
6)startX: 3 , startY: 6 , len: 3
7)startX: 6 , startY: 0 , len: 3
8)startX: 6 , startY: 3 , len: 3
9)startX: 6 , startY: 6 , len: 3
...
..
81)startX: 24 , startY: 24 , len: 3
์ด๋ ๊ฒ ์ด 81๊ฐ๊ฐ ๋์ค๊ฒ ๋๋ค.
์์ ๊ทธ๋ฆผ์ ๋ณด๊ฒ ๋๋ฉด ์กฐ๊ฑด ๋๊ฐ์ง๊ฐ ๋ณด์ธ๋ค.
์กฐ๊ฑด1) ์ฌ๊ท ํธ์ถ ๋๋ ๋ถ๋ถ์ N์ N / 3์ด ๋๋ค.
์กฐ๊ฑด2) startX : 0*N , 1*N , 2*N ... ์ด๋ ๊ฒ ํธ์ถ์ด ๋๋ค.
์ด ๋ถ๋ถ์ ๊ตฌํ ํด๋ณด๋ฉด
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
star(arr, startX + i*(N/3) , startY + j*(N/3) , N/3)
}
}
์ด๋ฐ์์ผ๋ก ํธ์ถ ํด์ฃผ๋ฉด ๋๊ณ
์ฌ๊ท ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๊ฐ์ผ๋ก (๋ฐฐ์ด์ ์ฃผ์๊ฐ, ์์์ x์ขํ, ์์์ y์ขํ, ๊ธธ์ด) ๋ฅผ ๋๊ฒจ์ฃผ๋ฉด ๋๋ค.
์ด๋ฐ์์ผ๋ก ๊ณ์ ์ฌ๊ท ํธ์ถ์ ํ๊ฒ ๋๋ฉด ? ์ข ๋ฃ ์กฐ๊ฑด์ ์ค์ ํด์ค์ผ ํ๋ค.
N == 1 ์ด ๋ ๋๊น์ง ๊ณ์ ์ฌ๊ท ํธ์ถ์ ํด์ฃผ๊ณ , N == 1์ธ ๊ฒฝ์ฐ์ *์ ๋ฃ์ด์ฃผ๋ฉด ๋๋๋ฐ,
์ด๋ ์ฃผ์ ํด์ผ ํ ์ ์, ๊ฐ์ด๋ฐ ๋ถ๋ถ์ ๋ณ์ ์ฑ์ฐ๋ฉด ์๋๊ธฐ ๋๋ฌธ์, ๋ฐ๋ณต๋ฌธ์์ i == 1 && j == 1 ์ธ ๊ฒฝ์ฐ์ ํธ์ถ์ ํ์ง ์๋๋ก ์ค์ ํด์ฃผ๋ฉด ๋๋ค!
private static void star(int[] arr, int startX, int startY, int N){
if( N == 1 ) {
arr[startX, startY] = "*"; // 1. ๋ณ์ ๋ฃ์ด์ฃผ๊ณ
return ; // 2. ์ข
๋ฃ
}
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
if( !(i==1 && j==1) ){
star(arr, startX + i*(N/3) , startY + j*(N/3) , N/3);
}
}
}
}
๐ด์ ์ฒด ์ฝ๋
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
String[][] arr;
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(bf.readLine());
arr = new String[N][N];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
arr[i][j] = " ";
}
}
star(arr, 0, 0, N);
for (String[] strings : arr) {
for (String string : strings) {
bw.write(string + "");
}
bw.write("\n");
}
bw.flush();
bw.close();
}
public static void star(String[][] arr, int x, int y, int N) {
if (N == 1) {
arr[x][y] = "*";
return; // ์ข
๋ฃ
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (!(i == 1 && j == 1)) {
star(arr, x + i * (N / 3), y + j * (N / 3), N / 3);
}
}
}
}
}