Algorithm/java
백준 10997 JAVA : 별 찍기 - 22
yeeeooonn
2023. 1. 29. 22:04
문제링크
https://www.acmicpc.net/problem/10997
10997번: 별 찍기 - 22
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
www.acmicpc.net
소스코드
package boj_10997;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
static int N;
static int [][] result;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
result = new int[4*N -1][4*N -3];
if(N == 1) { //N==1일때 별하나 출력
System.out.print("*");
return;
}else {//중앙 별 세개 찍기
for (int i = (4*N-1)/2-1; i < (4*N-1)/2+2; i++) {
result[i][(4*N-4)/2] =1;
}
}
star(N);
for (int i = 0; i < 4*N -1; i++) {
if(i ==1) { //두번째줄 별하나찍고 뒤에는 빈칸없도록
System.out.print("*");
}else {
for (int j = 0; j < 4*N -3; j++) {
//1이면 별, 아니면 빈칸출력
System.out.print(result[i][j] ==1? "*" :" ");
}
}
System.out.println();
}
}
private static void star(int n) {
if(n==1) {
return;
}
for (int i = 2*(N-n); i < (4*N-1) - 2*(N-n) ; i++) {
if(i == 2*(N-n) || i == 4*N-2 - 2*(N-n)) { //맨위, 맨밑
for (int j = 2*(N-n); j < 4*N -3 - 2*(N-n); j++) {
result[i][j] =1;
}
}else { //중간
for (int j = 2*(N-n); j < 4*N -3 - 2*(N-n); j++) {
result[i][2*(N-n)] =1; //왼쪽 사이드
if(i != 2*(N-n)+1 ) {
result[i][4*N-4 - 2*(N-n)] =1; //오른쪽 사이드
}
if(i == 2*(N-n)+2) {
result[i][4*N-5 - 2*(N-n)] =1; //오른쪽 사이드
}
}
}
}
star(n-1); //재귀
}
}