728x90
반응형
SMALL
백준 저지에서 별 찍기-19를 자바를 통해 풀어 보았다.
https://www.acmicpc.net/problem/10994
10994번 별 찍기-19
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
설명
자바에서 입력은 BufferReader로, 출력은 StringBuilder로 하기 위해 노력 중이다.
재귀 함수로 풀어야 하는 문제이다. 주어진 숫자에 따라 규칙에 맞춰 별 찍기가 수행되며 이 과정에서 재귀 함수가 사용된다. 주어진 예제를 보면 주어진 숫자*4+1 크기만큼의 정사각형 배열에 별을 찍는다. 정사각형 배열의 테두리에 별을 찍으며 내부에는 주어진 숫자보다 1작은 별 찍기를 한다.
주어진 숫자에 해당하는 크기의 배열을 만들고 재귀 함수를 통해 주어진 숫자보다 1작은 별 찍기를 불러온다. 테두리에 별을 찍은 후 내부에 재귀 함수를 통해 불러온 별 찍기를 똑같이 찍어주면 된다.
코드
//10994번 별 찍기-19.java
package week3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class 별_찍기_19_10994 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(bf.readLine());
char[][] star = print_star(n);
int size = (n-1)*4+1;
for(int i=0;i<size;i++) {
for(int j=0;j<size;j++) {
sb.append(star[i][j]);
}sb.append("\n");
}
System.out.println(sb.toString());
}
public static char[][] print_star(int num){
int size = (num-1)*4+1;
char[][] star = new char[size][size];
for(int i=0;i<size;i++) {
Arrays.fill(star[i], ' ');
}
if(num==1) {
star[0][0]='*';
return star;
}
char[][] pre_star = print_star(num-1);
for(int i=0;i<size;i++) {
for(int j=0;j<size;j++) {
if(i==0 || i==size-1 || j==0 || j==size-1) {
star[i][j]='*';
}
else if(2<=i && i<size-2 && 2<=j && j<size-2) {
star[i][j]=pre_star[i-2][j-2];
}
}
}
return star;
}
}
1
728x90
반응형
SMALL
'Problem Solving > 백준BOJ' 카테고리의 다른 글
[백준BOJ] 9935번 문자열 폭발.py (0) | 2021.08.02 |
---|---|
[백준BOJ] 5568번 카드 놓기.java (0) | 2021.08.02 |
[백준BOJ] 16505번 별.java (0) | 2021.08.02 |
[백준BOJ] 1991번 트리 순회.py (0) | 2021.07.29 |
[백준BOJ] 1753번 최단경로.py (0) | 2021.07.28 |