01-09 04:37
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[BAEKJOON] ๋ฐฑ์ค€ ๋ถ„ํ• ์ •๋ณต 2447 :: ๋ณ„ ์ฐ๊ธฐ - 10 ๋ณธ๋ฌธ

Algorithm/Baekjoon

[BAEKJOON] ๋ฐฑ์ค€ ๋ถ„ํ• ์ •๋ณต 2447 :: ๋ณ„ ์ฐ๊ธฐ - 10

miinsun 2022. 4. 10. 21:24

๐Ÿ’ฌ  ๋ฌธ์ œ ์„ค๋ช…

์žฌ๊ท€์ ์ธ ํŒจํ„ด์œผ๋กœ ๋ณ„์„ ์ฐ์–ด ๋ณด์ž. 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๋ฒˆ์งธ ์ค„๊นŒ์ง€ ๋ณ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1)

27

 

์˜ˆ์ œ ์ถœ๋ ฅ 1)

***************************
* ** ** ** ** ** ** ** ** *
***************************
***   ******   ******   ***
* *   * ** *   * ** *   * *
***   ******   ******   ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
*********         *********
* ** ** *         * ** ** *
*********         *********
***   ***         ***   ***
* *   * *         * *   * *
***   ***         ***   ***
*********         *********
* ** ** *         * ** ** *
*********         *********
***************************
* ** ** ** ** ** ** ** ** *
***************************
***   ******   ******   ***
* *   * ** *   * ** *   * *
***   ******   ******   ***
***************************
* ** ** ** ** ** ** ** ** *
***************************

โ€‹

โ€‹

๐Ÿ’ป  Main.java

  • ์‹œ๊ฐ„ ๋‹จ์ถ•์„ ์œ„ํ•ด BufferedReader์™€ StringBuilder๋ฅผ ์ž…์ถœ๋ ฅ์— ์ด์šฉํ–ˆ๋‹ค. 
  • 9๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ ์„œ ํŒŒํ‹ฐ์…˜ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰
    • ๋งจ์œ„ ์™ผ์ชฝ (i, j)
    • ๋งจ์œ„ ๊ฐ€์šด๋ฐ (i + n / 3, j)
    • ๋งจ์œ„ ์˜ค๋ฅธ์ชฝ (i + (2 * n / 3), j)
    • ๊ฐ€์šด๋ฐ ์™ผ์ชฝ (i, j + n /3)
    • ๊ฐ€์šด๋ฐ ๊ฐ€์šด๋ฐ (i + n / 3, j + n / 3)
    • ๊ฐ€์šด๋ฐ ์˜ค๋ฅธ์ชฝ(i + (2 * n / 3), j + n / 3)
    • ์•„๋ž˜ ์™ผ์ชฝ (i, j + (2 * n / 3))
    • ์•„๋ž˜ ๊ฐ€์šด๋ฐ (i + n / 3, j + (2 * n / 3))
    • ์•„๋ž˜ ์˜ค๋ฅธ์ชฝ(i + (2 * n / 3), j + (2 * n / 3)
  • ์ด๋•Œ ๊ฐ€์šด๋ฐ์˜ ๊ฐ€์šด๋ฐ๋Š” ๊ณต๋ฐฑ์œผ๋กœ ์ฑ„์›Œ์ค€๋‹ค.
  • ์‚ฌ์ด์ฆˆ๊ฐ€ 3์ด๋˜๋ฉด, ๊ธฐ๋ณธ ํŒจํ„ด์œผ๋กœ ์ฑ„์›Œ์ค€๋‹ค. 
/* ๋ฐฑ์ค€ ๋ถ„ํ• ์ •๋ณต - 2447 :: ๋ณ„ ์ฐ๊ธฐ - 10 */
import java.io.*;

public class Main {	
	static char[][] board;
	
	public static void fillBlank(int x, int y, int size) {
		for(int i = x; i < x + size; i++) {
			for(int j = y; j < y + size; j++) {
				board[i][j] = ' ';
			}
		}
	}
	
	public static void makeStar(int i, int j, int size) {
		if(size == 3) {
			board[i][j] = '*';
			board[i+1][j] = '*';
			board[i+2][j] = '*';
			board[i][j+1] = '*';
			board[i+1][j+1] = ' ';
			board[i+2][j+1] = '*';
			board[i][j+2] = '*';
			board[i+1][j+2] = '*';
			board[i+2][j+2] = '*';
			return;
		}
		
		int newSize = size / 3;
		
		// ์™ผ์ชฝ ์œ„
		makeStar(i, j, newSize);
		// ๊ฐ€์šด๋ฐ ์œ„
		makeStar(i + newSize, j, newSize);
		// ์˜ค๋ฅธ์ชฝ ์œ„
		makeStar(i + (2 * newSize), j, newSize);
		
		// ์™ผ์ชฝ ๊ฐ€์šด๋ฐ
		makeStar(i, j + newSize, newSize);
		// ๊ฐ€์šด๋ฐ ๊ฐ€์šด๋ฐ, ๊ณต๋ฐฑ์œผ๋กœ ์ฑ„์šฐ๊ธฐ
		fillBlank(i + newSize, j + newSize, newSize);
		// ์˜ค๋ฅธ์ชฝ ๊ฐ€์šด๋ฐ
		makeStar(i + (2 * newSize), j + newSize, newSize);
		
		// ์™ผ์ชฝ ์•„๋ž˜
		makeStar(i , j + (2 * newSize), newSize);
		// ๊ฐ€์šด๋ฐ ์•„๋ž˜
		makeStar(i + newSize , j + (2 * newSize), newSize);
		// ์˜ค๋ฅธ์ชฝ ์•„๋ž˜
		makeStar(i + (2 * newSize), j + (2 * newSize), newSize);
	}

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in ));
		int n = Integer.parseInt(br.readLine());
		board = new char[n][n];
		
		makeStar(0, 0, n);		
		
		StringBuilder sb = new StringBuilder();
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < n; j++) {
				sb.append(board[i][j]);
			}
			sb.append('\n');
		}
		
		System.out.println(sb);
		br.close();
	}
}
Comments