Competition/Baekjoon
[백준] 2447번 자바 별찍기
bisi
2020. 3. 31. 15:49
문제 출처
https://www.acmicpc.net/problem/2447
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다. *** * * *** N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.
www.acmicpc.net
접근 방식 및 풀이
- 분할정복.. 기본적인 문제, 배열의 위치에 대한 규칙성을 찾아 구현
- 참고 블로그
https://gaebal-goebal.tistory.com/37
[백준]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
소스 코드
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static String[][] stars;
static int n ;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
stars = new String[n][n];
for (int i = 0; i <n ; i++) {
for (int j = 0; j <n ; j++) {
stars[i][j] = " ";
}
}
makeStarArray(0,0,n);
StringBuilder sb = new StringBuilder();
for (int i = 0; i <n ; i++) {
for (int j = 0; j <n ; j++) {
sb.append(stars[i][j]);
}
sb.append("\n");
}
System.out.println(sb.toString());
}
private static void makeStarArray(int row, int col, int num ){
if(num==1){
stars[row][col] = "*";
return;
}
int val = num/3;
for (int i = 0; i <3 ; i++) {
for (int j = 0; j <3 ; j++) {
if(i==1 && j==1){// 같은경우는 넣지 않는다.
}else{
makeStarArray(row+(val*i), col+(val*j), val);
}
}
}
}
}
결과