문제
재귀적인 패턴으로 별을 찍어 보자. 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이다.
출력
첫째 줄부터 N번째 줄까지 별을 출력한다.
예제
풀이
import java.util.*;
import java.lang.*;
import java.io.*;
public class Main{
static char[][] arr;
public static void main (String[] args) throws java.lang.Exception {
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]; // 좌표를 찾아야하므로 이차원 배열 선언
// 모든 좌표에 빈칸 넣음
for(int i=0; i<arr.length; i++){
for(int j=0; j<arr.length; j++){
arr[i][j] = ' ';
}
}
star(arr, 0, 0, N);
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
bw.write(arr[i][j]);
}
bw.newLine();
}
bw.flush();
bw.close();
}
static void star(char[][] arr, int x, int y, int N){
// 더 이상 나눌 것이 없을 때
if(N == 1){
arr[x][y] = '*';
return;
}
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
if(!(i == 1 && j == 1)){
star(arr, x+i*(N/3), y+j*(N/3), N/3);
}
}
}
}
}
for문으로만 푸는 문제인 줄 알았는데 '재귀함수'를 꼭 사용해서 풀어야하는 문제였다.
가운데만 공백이 있는 형태의 사각형 형태가 규칙이다.
참고
[백준] 2447번 자바 별찍기
문제 출처 https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패..
log-laboratory.tistory.com
[백준]2447번: 별찍기-10
https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 첫째 줄에 N이 주어진다. N은 항상 3의 제곱꼴인 수이다. (3, 9, 27, ...) (N=3k, 1 ≤ k < 8) www.acmicpc.net 어떻게 풀까? 위의 이미지에서 검..
gaebal-goebal.tistory.com
출처
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
'Algorithm > Java' 카테고리의 다른 글
[백준알고리즘] 2231번 분해합(JAVA) (0) | 2021.04.06 |
---|---|
[백준알고리즘] 2798번 블랙잭(JAVA) (0) | 2021.04.05 |
[백준알고리즘] 10870번 피보나치 수 5(JAVA) (0) | 2021.03.22 |
[백준알고리즘] 10872번 팩토리얼 (JAVA) (0) | 2021.03.19 |
[백준알고리즘] 3053번 택시 기하학 (JAVA) (0) | 2021.03.17 |