코딩 연습/백준
별 찍기 - 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);
}
}
}