코딩 연습/백준

별 찍기 - 10 시간초과

blackbearwow 2022. 4. 25. 10:34

꽤 어려운 문제였다. 처음에 감을 잡지 못해서 한참 헤맸다. 어떻게 재귀로 표현할지 감이 안잡혔다. 

*의 조건을 찾아서 화면에 print하려고 했더니 전혀 감잡지 못했었다. 

하지만 다른 블로그를 찾아보고나니, *의 조건을 찾는것이 아닌, " "의 조건을 찾고있었다. 나도 " "의 조건을 찾고 보니 문제의 해결방법이 보이기 시작했다.

" "의 조건은 n의 3등분의 가운데이면 이다. 그리고 나머지가 모두 *은 아니다. 해당 자리가 한변에 n/3길이의 정사각형에서 3등분의 가운데인지도 살펴봐야 한다. 이것을 n이 3일 때까지 반복하여 모두 " "자리가 아니었을 때만 *을 출력한다.

import java.util.*;
public class Main
{
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for(int y=0; y<n; y++)
		{
			for(int x=0; x<n; x++)
				star(x, y, n);
			System.out.println("");
		}
		sc.close();
	}
	public static void star(int x, int y, int n)
	{
		if((x*3/n%3==1)&&(y*3/n%3==1))
			System.out.print(" ");
		else
		{
			if(n==3)
				System.out.print("*");
			else
				star(x, y, n/3);
		}
	}
}
댓글수0