[백준] 2448 별찍기 11 - Java
재귀 문제임을 파악하자.
일단 주어진 예시를 잘라서 재귀의 basis를 구한 후 접근해야 한다.
N = 3 * 2^k 이므로,
이차원 배열의 행 : 3 * 2^k
이차원 배열의 열 : 3 * 2^(k+1)
위의 식을 기억하고 점화식을 작성한 후 코드를 작성하자.
import java.util.*;
import java.io.*;
public class Main {
static int N;
static char[][] map;
static char[][] basis = {{' ',' ','*',' ',' '}, {' ', '*', ' ','*', ' '}, {'*','*','*','*','*'}};
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
map = new char[N][N*2-1];
for(int i=0; i<N; i++){
for(int j=0; j<2 * N -1; j++){
map[i][j] = ' ';
}
}
solve(0, 0, N);
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++){
for(int j=0; j<2 * N -1; j++){
sb.append(map[i][j] + "");
}
sb.append("\n");
}
System.out.println(sb);
}
static void solve(int r, int c, int n){
if(n == 3){
for(int i=0; i<3; i++){
for(int j=0; j<5; j++){
map[i + r][j + c] = basis[i][j];
}
}
/* map[r][c] = '*';
map[r + 1][c - 1] = '*';
map[r + 1][c + 1] = '*';
map[r + 2][c - 2] = '*';
map[r + 2][c - 1] = '*';
map[r + 2][c] = '*';
map[r + 2][c + 1] = '*';
map[r + 2][c + 2] = '*';*/
return;
}
// n 은 2등분씩.. 세로는 2등분 해야함.. 분할해보면 답 나옴.
solve(r, c + n / 2 , n / 2);
solve(r + n / 2, c , n / 2);
solve(r + n / 2, c + n , n / 2);
}
}
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 16987 계란으로 계란치기 - Java (0) | 2022.05.23 |
---|---|
[백준] 1759 암호 만들기 - Java (0) | 2022.05.23 |
[백준] 5426 비밀 편지 - Java (0) | 2022.05.19 |
[백준] 6588 골드바흐의 추측 - Java (0) | 2022.05.17 |
[백준] 2447 별찍기 10 - Java (0) | 2022.05.17 |
댓글
이 글 공유하기
다른 글
-
[백준] 16987 계란으로 계란치기 - Java
[백준] 16987 계란으로 계란치기 - Java
2022.05.23 -
[백준] 1759 암호 만들기 - Java
[백준] 1759 암호 만들기 - Java
2022.05.23 -
[백준] 5426 비밀 편지 - Java
[백준] 5426 비밀 편지 - Java
2022.05.19 -
[백준] 6588 골드바흐의 추측 - Java
[백준] 6588 골드바흐의 추측 - Java
2022.05.17