본문 바로가기

Algorithm/Java

[백준알고리즘] 2447번 별찍기 - 10(JAVA)

문제

재귀적인 패턴으로 별을 찍어 보자. 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문으로만 푸는 문제인 줄 알았는데 '재귀함수'를 꼭 사용해서 풀어야하는 문제였다.

가운데만 공백이 있는 형태의 사각형 형태가 규칙이다.

 

참고

log-laboratory.tistory.com/76

 

[백준] 2447번 자바 별찍기

문제 출처 https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패..

log-laboratory.tistory.com

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

 

출처

www.acmicpc.net/problem/2447

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

 

반응형