728x90

문제

 

 

접근 방식

별 찍기 문제들은 재귀 처음 배울 때 너무 싫어했던 기억이 있어서

풀기 싫었는데 스트릭 유지할겸 오랜만에 재귀 문제를 풀어보았다.

 

정사각형이 점점 작아지는 형태로

예를 들면 가장 밖의 정사각형이 13 * 13이라면

그 안의 사각형은 상하좌우 한 칸 거리를 두고 9 * 9

그 안의 사각형도 상하좌우 한 칸 거리를 두고 5 * 5

마지막은 1 * 1이 된다.

 

규칙을 찾아보면 사각형의 가로세로 길이가 4씩 줄어드는 것을 알 수 있는데

재귀를 호출할 때마다 x축과 y축을 4씩 늘리거나 줄여주면서

2차원 문자 배열에 별을 저장한 후에 모두 끝나면 배열을 출력해주면 된다.

 

 

풀이

public class Main {

	private static char[][] stars;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		int n = Integer.parseInt(br.readLine());

		stars = new char[1 + (n - 1) * 4][1 + (n - 1) * 4];

		star(0, 1 + (n - 1) * 4);

		for (char[] star : stars) {
			sb.append(star).append("\n");
		}

		System.out.println(sb);
	}

	private static void star(int x, int y) {

		if (x >= y) return;

		for (int i = x; i < y; i++) {
			if (i == x || i == y - 1) {
				for (int j = x; j < y; j++) stars[i][j] = '*';
			} else {
				stars[i][x] = '*';
				for (int j = x + 1; j < y - 1; j++) stars[i][j] = ' ';
				stars[i][y - 1] = '*';
			}
		}

		star(x + 2, y - 2);
	}
}

 

+ Recent posts