Java 예제: 모래시계 모양 배열 만들기
모래시계 모양으로 배열을 만드는 예제입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import blog.gui.PrintArray;
public class Sandglass {
public static void main(String[] args) {
int[][] array = new int[5][5];
int value = 1; // 배열 각 칸마다 들어갈 값. 1씩 증가한다.
int mid = (int) Math.ceil((double)array.length / 2);
// ceil(올림) 내의 값은 double이어야 한다. array.length는 int형이다.
// mid: 배열에서 세로(열)의 중간값. 5/2 = 3(☞2.5)
// 상단 (첫 줄부터 mid까지)
for(int row = 0; row < mid; row++) // 행 0, 1, 2
{
// 0, .. < (5-0) → 0, 1, 2, 3, 4
// 열 (0, 1, 2, 3, 4)(1, 2, 3)(2)
for(int col = row; col < (array.length - row); col++ )
{
array[row][col] = value;
arrayLog(row, col, array.length, value);
value++;
}
}
System.out.println(" ");
// 하단
for(int row = mid; row < array.length; row++) // 행 3, 4
{
for(int col = (array.length - 1) - row; col <= row; col++ )
// 열 (1, 2, 3)(0, 1, 2, 3, 4)
{
array[row][col] = value;
arrayLog(row, col, array.length, value);
value++;
}
}
// 표시
new PrintArray(array);
}
private static void arrayLog(int row, int col, int arrayLength, int value) {
System.out.println("row: " + row + " | (array.length - row): "
+ (arrayLength - row) + " | col: " + col + " | value: " + value );
}
}
PrintArray는 Java Swing 예제: 다차원 배열 표시하기 (기초 설정 방법, for문으로 swing 요소 반복 등)을 참고해주세요.
순서도 상에서 col = 6 - row인 값이 실제 프로그래밍시 col = 4 - row가 되는데 왜 5가 아니라 4일까요? 순서도에서 6을 5로 바꾸면 (1,2,3)(0,1,2,3,4)가 되는데 프로그래밍에서는 행도 0부터 시작하기 때문에 5-3=2, 5-4=1가 되어 프로그래밍상 배열과 맞지 않게 됩니다. 그러므로 프로그래밍에서는 행과 열 모두를 고려하여 2를 뺀 4가 되어야 합니다. 현재 row 번호가 0부터 시작하므로 순서도에서 6 - 1 = 5이나 프로그래밍상에서는 (6-1-1) - (5-1) = 0이 되어야 하는 것이죠.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
row: 0 | (array.length - row): 5 | col: 0 | value: 1
row: 0 | (array.length - row): 5 | col: 1 | value: 2
row: 0 | (array.length - row): 5 | col: 2 | value: 3
row: 0 | (array.length - row): 5 | col: 3 | value: 4
row: 0 | (array.length - row): 5 | col: 4 | value: 5
row: 1 | (array.length - row): 4 | col: 1 | value: 6
row: 1 | (array.length - row): 4 | col: 2 | value: 7
row: 1 | (array.length - row): 4 | col: 3 | value: 8
row: 2 | (array.length - row): 3 | col: 2 | value: 9
row: 3 | (array.length - row): 2 | col: 1 | value: 10
row: 3 | (array.length - row): 2 | col: 2 | value: 11
row: 3 | (array.length - row): 2 | col: 3 | value: 12
row: 4 | (array.length - row): 1 | col: 0 | value: 13
row: 4 | (array.length - row): 1 | col: 1 | value: 14
row: 4 | (array.length - row): 1 | col: 2 | value: 15
row: 4 | (array.length - row): 1 | col: 3 | value: 16
row: 4 | (array.length - row): 1 | col: 4 | value: 17
This post is licensed under
CC BY 4.0
by the author.
