2447번: 별 찍기 - 10 (acmicpc.net)
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
- N이 3의 거듭제곱이라고 할 때, 크기 N의 패턴은 N*N 정사각형 모양이다.
- 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴
- N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 개운데의 (N/3)*(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태
풀이 과정
[백준] 2447번 : 별 찍기 - 10 - JAVA [자바] (tistory.com)
[백준] 2447번 : 별 찍기 - 10 - JAVA [자바]
st-lab.tistory.com
[Java] 백준 2447번 [별 찍기 - 10] 자바 (velog.io)
[Java] 백준 2447번 [별 찍기 - 10] 자바
[Java] 백준 2447번 [별 찍기 - 10] 자바
velog.io
- 3일때 모양이 연속적으로 채우면서 진행되는데, 단 한 block의 '가운데'는 채우지 않음
- 2차원 배열을 행을 x, 열을 y로 생각
- N=3일때 ,공백은 arr[1][1]
-> 이 의미는 행을 채울 때, (0,0),(0,1),(0,2),(1,0)별을 출력하고 별 출력이 4번 이루어지면 그 다음은 반드시 공백이라는 것
- N=27일 때 9개의 블록으로 구분 가능
- 공백인 구간을 만족한다면 그 구간은 공백으로 채우고, 공백이 아닌 블럭은 재귀호출을 하면 됨
- N=9일 때로 넘어감
- 앞선 함수와 같이 9개의 블록으로 나눈 뒤, 공백 구간은 공백 문자로 채우고 공백이 아닌 구간을 다시 재귀호출
- N=3일 때로 넘어감
- 위와 같은 과정을 반복하다 보면 결국 N=1일 떄가 옴
- 여기서는 더 이상 쪼갤 수 없기 때문에 해당 구역의 배열을 공백 또는 별(*)로 채움
- if(count == 5) {의 조건은 n이 3일 때 별은 5번째에서 공통적으로 공백이 찍히게 됨
- count 변수를 반복이 한 번 될 때까지 증가시켜서 5번째에 위치할 때 공백을 처리할 수 있도록 만듬
정답
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main
{
public static char[][] arr;
static void makeStar(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++)
{
arr[i][j] = ' ';
}
}
return;
}
//더 이상 쪼갤 수 없는 블록일 때
if(n==1)
{
arr[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)
{
//공백 칸일 경우
makeStar(i,j,size,true);
}
else
{
makeStar(i,j,size,false);
}
}
}
}
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());
arr = new char[n][n];
makeStar(0,0,n,false);
for(int i=0; i<n;i++)
{
bw.write(arr[i]);
bw.write("\n");
}
bw.flush();
bw.close();
}
}
'Java > 백준' 카테고리의 다른 글
[JAVA] 백준 9663 N-Queen (0) | 2024.02.23 |
---|---|
[JAVA] 백준 11729 하노이 탑 이동 순서 (0) | 2024.02.20 |
[JAVA] 백준 4779 칸토어 집합 (0) | 2024.02.18 |
[JAVA] 백준 24060 알고리즘 수업 - 병합 정렬 1 (0) | 2024.02.17 |
[JAVA] 백준 25501 재귀의 귀재 (0) | 2024.02.17 |