[백준] 10994 별 찍기 - 19 -Java
간단한 별찍기 문제를 풀 때는 반복문을 사용해서 바로바로 풀 수 있지만, 복잡한 별찍기 문제를 풀 때는 이차원 배열을 설정해서 규칙에 맞게 찍는 것이 편하고, 더 복잡한 별찍기 문제에서는 별을 찍는 함수를 만들고 규칙에 따라 재귀적으로 호출해야 한다.
이번 문제도 별찍기 중에서는 꽤 복잡한 편이고, 별찍기 함수와 재귀를 이용해서 풀었다.
Java
수평과 수직 방향으로 별을 찍은 다음, N을 감소시켜 N이 1이 될 때 까지 재귀적으로 함수를 호출했다.
import java.util.*;
import java.io.*;
public class Main {
static char[][] arr;
public static void main(String[] args) throws 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());
arr = new char[397][397];
int len = (4 * (N-1)) + 1;
for(int i=0; i<len; i++){
for(int j=0; j<len; j++){
arr[i][j] = ' ';
}
}
star(N,0,0);
for(int i=0; i<len; i++){
for(int j=0; j<len; j++){
System.out.print(arr[i][j]);
}
System.out.println();
}
}
static void star(int N, int x, int y){
if(N == 1){
arr[x][y] = '*';
return; // 1이면 별 하나만 찍기
}
int len = 4 * (N-1) + 1;
for(int i = y; i<y+len; i++){
arr[x][i] = '*';
arr[x + len -1][i] = '*';
} // horizontal 별찍기
for(int i = x; i<x + len; i++){
arr[i][y] = '*';
arr[i][y + len -1] = '*';
} // vertical 별찍기
star(N-1, x+2, y+2);
return;
}
}
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 1850 최대공약수 -Java (0) | 2022.02.18 |
---|---|
[백준] 10994 별 찍기 - 23 - Java (0) | 2022.02.18 |
[백준] 22252 정보 상인 호석 -Java (0) | 2022.02.16 |
[백준] 2075 N번째 큰 수 -Java / Python (0) | 2022.02.16 |
[백준] 7662 이중 우선순위 큐 -Java (0) | 2022.02.16 |
댓글
이 글 공유하기
다른 글
-
[백준] 1850 최대공약수 -Java
[백준] 1850 최대공약수 -Java
2022.02.18 -
[백준] 10994 별 찍기 - 23 - Java
[백준] 10994 별 찍기 - 23 - Java
2022.02.18 -
[백준] 22252 정보 상인 호석 -Java
[백준] 22252 정보 상인 호석 -Java
2022.02.16 -
[백준] 2075 N번째 큰 수 -Java / Python
[백준] 2075 N번째 큰 수 -Java / Python
2022.02.16