Skip to content

Commit e90282c

Browse files
committed
고다혜: [BOJ] 1030 프렉탈 평면_241217
1 parent 0da6e94 commit e90282c

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

BOJ/1000-5000번/DH_1030.java

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
/*
5+
* 프렉탈 평면
6+
*/
7+
8+
public class DH_1030 {
9+
static StringBuilder sb = new StringBuilder();
10+
static int s, N, K, R1, R2, C1, C2;
11+
12+
public static void main(String[] args) throws Exception {
13+
14+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
15+
StringTokenizer st = new StringTokenizer(br.readLine());
16+
17+
s = stoi(st); N = stoi(st); K = stoi(st);
18+
R1 = stoi(st); R2 = stoi(st);
19+
C1 = stoi(st); C2 = stoi(st);
20+
21+
// 시간 s일 때, R1행 C1열부터 R2행 C2열까지의 모습을 출력
22+
if(s == 0) sb.append("0");
23+
else {
24+
for(int r = R1; r < R2 + 1; r++) {
25+
for(int c = C1; c < C2 + 1; c++) {
26+
int outer = (int) Math.pow(N, s);
27+
double percent = ((N - K) >> 1) * (1.0) / N;
28+
sb.append(getBlockStatus(r, c, s, N, outer, percent));
29+
}
30+
31+
sb.append("\n");
32+
}
33+
}
34+
35+
System.out.print(sb);
36+
}
37+
38+
static int getBlockStatus(int r, int c, int s, int n, int outer, double percent) {
39+
40+
// 바깥 사각형과 안쪽 사각형 사이 간격 구하기
41+
int interval = (int) (outer * percent);
42+
43+
if(isInCenter(r, c, interval, outer)) return 1;
44+
if(s == 1) return 0;
45+
46+
// 그 다음 확인할 사각형 사이즈
47+
int nextRecSize = (outer / n);
48+
return getBlockStatus(r % nextRecSize, c % nextRecSize, s - 1, n, nextRecSize, percent);
49+
}
50+
51+
static boolean isInCenter(int r, int c, int interval, int outer) {
52+
return r >= interval && r < (outer - interval) && c >= interval && c < (outer - interval);
53+
}
54+
55+
static int stoi(StringTokenizer st) {
56+
return Integer.parseInt(st.nextToken());
57+
}
58+
}

0 commit comments

Comments
 (0)