๐Ÿ“ algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ฐฑ์ค€ 2447 ๋ณ„์ฐ๊ธฐ - 10 JAVA ๋ฌธ์ œ ํ’€์ด

c0zi 2024. 3. 24. 23:35

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


์žฌ๊ท€์ ์ธ ํŒจํ„ด์œผ๋กœ ๋ณ„์„ ์ฐ์–ด ๋ณด์ž. 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

์ถœ์ฒ˜ : ๋ฐฑ์ค€ (https://www.acmicpc.net/problem/2447)

 

๐Ÿ“‘ ๋ฌธ์ œ ํ’€์ด

1. ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ 3์œผ๋กœ ๋‚˜๋ˆ„์–ด 9๋“ฑ๋ถ„

 

2. 9๋“ฑ๋ถ„ ํ•œ ๊ฒƒ ์ค‘ ๊ฐ€์šด๋ฐ ์žˆ๋Š” ๋ฐฐ์—ด์„ ๊ณต๋ฐฑ์ฒ˜๋ฆฌ

→ ๋ฐ˜๋ณต

 

โœ ์ž‘์„ฑ ์ฝ”๋“œ

package backjun;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ๋ณ„์ฐ๊ธฐ {

	// ๊ณต๋ฐฑ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด 2์ฐจ์› boolean ๋ฐฐ์—ด ์ƒ์„ฑ
	static boolean[][] arr;

	public static void main(String[] args) throws IOException {
    
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
        
        // ๋ฐฐ์—ด ๊ธธ์ด N ์ž…๋ ฅ๋ฐ›๊ณ 
		int N = Integer.parseInt(br.readLine());
		
		arr = new boolean[N][N];
		
        // 3๋“ฑ๋ถ„ ์‹œ์ž‘
		div(0, 0, N / 3);
		
        // ๋ฐฐ์—ด์ด true๋ฉด ๊ณต๋ฐฑ์ด๋ฏ€๋กœ " ", false๋ฉด ๋ณ„์„ ์ฐ์–ด์คŒ
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				if (arr[i][j]) sb.append(" ");
				else sb.append("*");
			}
			sb.append("\n");
		}
        
		System.out.println(sb);
	}
	
	public static void div(int r, int c, int l) {
    	// ๋” ์ด์ƒ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์œผ๋ฉด ์ข…๋ฃŒ
		if (l < 1) {
			return;
		}
		
        // 9๋“ฑ๋ถ„ํ•œ ๋ฐฐ์—ด์˜ ์‹œ์ž‘์ ๋“ค์„ ์ˆœํšŒ
		for (int i = r; i <= r + 2*l; i+= l) {
			for (int j = c; j <= c + 2*l; j += l) {
            	// ์ •๊ฐ€์šด๋ฐ ๋ฐฐ์—ด์ด๋ฉด, ๊ณต๋ฐฑ์ฒ˜๋ฆฌ
				if (i == r + l && j == c + l) {
					black(i, j, l);
				} else { // ๋‚˜๋จธ์ง€๋Š” ๊ณ„์† 9๋“ฑ๋ถ„ํ•˜๊ธฐ
					div (i, j, l / 3);
				}
			}
		}
	}
	
	public static void blank(int r, int c, int l) {
    	// ๊ฐ€์šด๋ฐ ๋ฐฐ์—ด์„ ๋ชจ๋‘ ๋Œ๋ฉด์„œ ๊ณต๋ฐฑ์ฒ˜๋ฆฌ ํ•ด์ฃผ๊ธฐ
		for (int i = r; i < r + l; i++) {
			for (int j = c; j < c + l; j++) {
				arr[i][j] = true;
			}
		}
	}
}