-
[Java] 백준 2447 별찍기 10Programming/Algorithm 2021. 3. 9. 00:48
문제
크기 3의 패턴이 주어지고, 크기가 3이상일 때 가운데는 공백 나머지는 n/3 패턴으로 둘러싼 형태의 모양을 출력하는 문제이다.
풀이
공백이 되어야 하는 부분과 아닌 부분으로 분할해서 재귀하는 것이 풀이의 핵심이다.
- n을 3으로 나누어 현재 영역을 9등분한다.
- 이 때 가운데는 공백이라는 조건이 있으므로, 5번째 영역은 항상 공백이 되어야 한다.
- n이 1이라면 별을 출력하고, 아니라면 나누어진 영역을 재탐색한다.
코드
import java.io.*; 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)); int n = Integer.parseInt(br.readLine()); // 3,9,27,... map = new char[n][n]; recursion(0, 0, n, false); for (int i = 0; i < n; i++) { bw.write(map[i]); bw.write("\n"); } bw.close(); } static void recursion(int x, int y, int n, boolean blank) { // 공백칸 if (blank){ for (int i = x; i < x + n; i++) { for (int j = y; j < y + n; j++) { map[i][j] = ' '; } } return; } // 더이상 쪼갤 수 없는 블록일 때 if (n == 1){ map[x][y] = '*'; return; } int nn = n / 3; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (i == 1 && j == 1){ recursion(x + i * nn, y + j * nn, nn, true); } else{ recursion(x + i * nn, y + j * nn, nn, false); } } } } }
'Programming > Algorithm' 카테고리의 다른 글
[Java] 백준 2579 계단 오르기 (0) 2021.03.10 [Java] 백준 1463 1로 만들기 (0) 2021.03.09 [Java] 백준 1992 쿼드트리 (0) 2021.03.09 [Java] 백준 11729 하노이 탑 이동 순서 (0) 2021.03.05 [Java] 백준 1780 종이의 개수 (0) 2021.03.05 댓글