티스토리 뷰

알고리즘 공부하기

백준 2447 별 찍기 - 10 JAVA

개발중인 감자 2023. 1. 9. 18:01

 

별 찍기 - 10

(https://www.acmicpc.net/problem/2447)

난이도 : 골드 5(2023.01.09 기준)

 

 

문제

재귀적인 패턴으로 별을 찍어 보자. 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 

 

 

풀이 후기 

 

1) 재귀로 풀었다. 

2) 밑에 표처럼 계속 배열을 9분할->9분할->9분할로 나눈다는 재귀를 이용하였음. 

배열의 인덱스 위치가 재귀에서 굉장히 중요하니 잘 이해해둘 것 

0 <= i < n/3
0 <= j < n/3
0 <= i < n/3
n/3 <= j < 2*n/3
0 <= i < n/3
2*n/3 <= j < n
n/3 <= i < 2*n/3
0 <= j < n/3
n/3 <= i < 2*n/3
n/3 <= j < 2*n/3
** 공백 **
n/3 <= i < 2*n/3
2*n/3 <= j < n
2*n/3 <= i < n
0 <= j < n/3
2*n/3 <= i < n
n/3 <= j < 2*n/3
2*n/3 <= i < n
2*n/3 <= j < n

 

코드 

public class B_2447 {
	static char[][] map;
	private static void func(int n, int a, int b) {
		if (n == 1) {
			map[a][b] = '*';
			return;
		}
		
		for (int i = a; i < n+a; i+=n/3) {
			for (int j = b; j < n+b; j+=n/3) {
				if (i >= n/3+a && i < n/3*2+a && j >= n/3+b && j < n/3*2+b) { //딱 중간
					continue;
				} else {
					func(n/3, i, j);
				}
			}
		}
	}
	public void work() throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		int n = Integer.parseInt(br.readLine()); 
		map = new char[n][n];
		for (char[] m : map) {
			Arrays.fill(m, ' '); //공백으로 배열을 일단 채워줌. 
		}
		func(n, 0, 0);
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				sb.append(map[i][j]);
			}
			sb.append("\n");
		}
		System.out.print(sb);
	}
}

 

 

 

'알고리즘 공부하기' 카테고리의 다른 글

백준 14891 톱니바퀴 JAVA  (2) 2023.01.26
백준 1941 소문난 칠공주 JAVA  (0) 2023.01.15
백준 2583 영역 구하기 JAVA  (0) 2023.01.10
백준 1780 종이의 개수 JAVA  (0) 2023.01.09
백준 1992 쿼드트리 JAVA  (0) 2023.01.08