본문 바로가기

Problem Solving/백준BOJ

[백준BOJ] 10994번 별 찍기-19.java

728x90
반응형
SMALL

 

백준 저지에서 별 찍기-19를 자바를 통해 풀어 보았다. 

https://www.acmicpc.net/problem/10994

 

10994번: 별 찍기 - 19

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

www.acmicpc.net

10994번 별 찍기-19.java

 

GitHub - tomy9729/Algorithm: 🐗 내가 직접 작성한 내 코드 🐗

🐗 내가 직접 작성한 내 코드 🐗. Contribute to tomy9729/Algorithm development by creating an account on GitHub.

github.com

 

 

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