끄적끄적 코딩
article thumbnail
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);
			}
		}
	}
}

 

 

검색 태그