본문 바로가기
코딩테스트

[백준] 2447번 별 찍기 10 - Java

by CuckooBird 2023. 7. 2.

문제


코드

맞았습니다가 뜬 코드입니다. - 메모리 16784KB | 시간 556ms | 코드 길이 745B

import java.io.*;

public class Main {
	private static final BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
	private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	
	public static void main(String[] args) throws IOException {
		int n = Integer.parseInt(bf.readLine());
		
		for(int i = 0 ; i < n ; i++) {
			for(int j = 0 ; j < n ; j++) {
				draw_square(i, j, n);
			}
			bw.write("\n");
		}
        bw.flush();
		bw.close();
		bf.close();
	}
	
	private static void draw_square(int i, int j, int n) throws IOException {
		if(i / n % 3 == 1 && j / n % 3 == 1) {
			bw.write(" ");
		}
		else if(n / 3 == 0) {
			bw.write("*");
		}
		else {
			draw_square(i, j, n/3);
		}
	}
}

이런 패턴입니다.

 

9까지 보며 설명 드리겠습니다.

빈공간이 생기는 곳의 규칙을 아는 게 중요한데요, 우선 n == 3일 경우에 (1, 1)에 빈공간이 생깁니다. i % 3 == 1 인 부분에서 빈 공간이 그려진다고 볼 수 있겠습니다.

n == 9 일 경우에는 (3, 3), (3, 4), (3, 5), (4, 3), (4, 4), (4, 5), (5, 3), (5, 4), (5, 5) 에서 빈공간이 생깁니다. 이 좌표는 i와 j를 각각 행과 열이라고 보았을 때 (i / 3) % 3 == 1  && (j / 3) % 3 == 1 이라고 볼 수 있게됩니다.

크게 보아서 0~2 / 3 은 0이고, 3~5 / 3 은 1이고, 6~8 / 3 은 2이기 때문에 하나의 3x3 정사각형으로 볼 수 있기 때문입니다.

 

 

private static void draw_square(int i, int j, int n) throws IOException {
		if(i / n % 3 == 1 && j / n % 3 == 1) {
			bw.write(" ");
		}
		else if(n / 3 == 0) {
			bw.write("*");
		}
		else {
			draw_square(i, j, n/3);
		}
	}

Search 🔍

https://codesyun.tistory.com/75