문제
코드
맞았습니다가 뜬 코드입니다. - 메모리 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 🔍
'코딩테스트' 카테고리의 다른 글
[백준] 1303번 '전쟁 - 전투' - Java (2) | 2023.07.04 |
---|---|
[백준] 1743번 음식물 피하기 - Java (2) | 2023.07.03 |
[백준] 2225번 합분해 - Java (1) | 2023.07.01 |
[백준] 1669번 멍멍이 쓰다듬기 (2) | 2023.06.30 |
[백준] 1593번 문자 해독 - Java (2) | 2023.06.29 |