21.08.09 기록
백준 알고리즘 2447 풀이
🎆나의 오답
-2차원 boolean 배열을 사용하여 N이 1이되었을 때 false값은 공백을, true 값은 *을 출력했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class B2447 {
public static StringBuilder sb = new StringBuilder();
public static boolean[][] star;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
star = new boolean[N][N];
getPattern(N);
}
public static int getPattern(int N) {
if(N == 1) {
printStar();
return 0;
}
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
star[i][j] = true;
}
}
for(int i = 0; i < (N/3); i++) {
for(int j = 0; j < N; j++) {
star[i][j] = true;
}
}
for(int i = (N/3); i < (2*N/3); i++) {
for(int j = 0; j < N/3; j++) {
star[i][j] = true;
}
for(int j = (N/3); j < (2*N/3); j++) {
star[i][j] = false;
}
for(int j = (2*N/3); j < N; j++) {
star[i][j] = true;
}
}
for(int i = (2*N/3); i < N; i++) {
for(int j = 0; j < N; j++) {
star[i][j] = true;
}
}
return getPattern(N/3);
}
public static void printStar() {
for(int i = 0; i < star.length; i++) {
for(int j = 0; j < star.length; j++) {
if(star[i][j]) { sb.append("*"); }
else { sb.append(" "); }
}
sb.append("\n");
}
System.out.println(sb);
}
}
-아래 사진처럼 출력하고 결국 막혀서 해설을 보았다.

🎆해설(메모리 48.1MB, 시간 356ms로 통과)
-예시를 들어 코드를 따라가는 것보다 이번 문제는 규칙을 이해하고 코드를 이해하는 게 더 빨랐다.
-다시 풀어도 풀 수 있을진 모르겠지만.. 다음에 한 번 더 풀어봐야겠다!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class B2447 {
public static char[][] star;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
star = new char[N][N];
getPattern(0, 0, N, false);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
sb.append(star[i][j]);
}
sb.append("\n");
}
System.out.println(sb);
}
public static void getPattern(int x, int y, int N, boolean space) {
//공백칸인 경우
if(space) {
for(int i = x; i < (x+N); i++) {
for(int j = y; j < (y+N); j++) {
star[i][j] = ' ';
}
}
return;
}
if(N == 1) {
star[x][y] = '*';
return;
}
int size = (N / 3); //한 블록의 크기
int count = 0;
for(int i = x; i < (x+N); i+=size) {
for(int j = y; j < (y+N); j+=size) {
count++;
if(count == 5) { getPattern(i, j, size, true); }
else { getPattern(i, j, size, false); }
}
}
}
}