반응형
문제
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.
크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.*** * * ***
N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.
입력
첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k < 8이다.
27
출력
첫째 줄부터 N번째 줄까지 별을 출력한다.
*************************** * ** ** ** ** ** ** ** ** * *************************** *** ****** ****** *** * * * ** * * ** * * * *** ****** ****** *** *************************** * ** ** ** ** ** ** ** ** * *************************** ********* ********* * ** ** * * ** ** * ********* ********* *** *** *** *** * * * * * * * * *** *** *** *** ********* ********* * ** ** * * ** ** * ********* ********* *************************** * ** ** ** ** ** ** ** ** * *************************** *** ****** ****** *** * * * ** * * ** * * * *** ****** ****** *** *************************** * ** ** ** ** ** ** ** ** * ***************************
알고리즘 분류
분할 정복(divide_and_conquer), 재귀(recursion)
소스코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
static boolean isBlank(int x, int y, int n) {
int offset = n / 3; //1,3,9
if (offset == 0) return false;
if (x / offset == 1 && y / offset == 1) {
return true;
}
if (x % offset == 1 && y % offset == 1) {
return true;
}
return isBlank(x % offset, y % offset, n / 3);
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
char[] star = new char[N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (isBlank(i, j, N)) {
star[j] = ' ';
} else {
star[j] = '*';
}
}
bw.write(star);
bw.newLine();
}
br.close();
bw.flush();
bw.close();
}
}
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
JAVA 백준 11729번 하노이 탑 이동 순서 (0) | 2022.06.14 |
---|---|
JAVA 백준 11478번 서로 다른 부분 문자열의 개수 (0) | 2022.06.14 |
JAVA 백준 17478번 재귀함수가 뭔가요? (0) | 2022.06.12 |
JAVA 백준 10870번 피보나치 수 5 (0) | 2022.06.12 |
JAVA 백준 10872번 팩토리얼 (0) | 2022.06.12 |
댓글