티거의 개발 공간

소프트웨어공학과 대학교연계 스터디그룹 과제로 모래시계 알고리즘을 분석하는
내용이 나왔다. 여러 언어로 구현할 수 있는 알고리즘이나, 내가 사용하는 주 언어는 자바이므로
자바를 이용해 구현해보겠다.
자바에서 모래시계 알고리즘을 구현하는 것은 꽤나 쉽다.

 


 

모래시계 알고리즘의 출력물은 아래와 같다

1234567
0234560
0034500
0004000
0034500
0234560
1234567

위처럼 2차원 배열에 모래시계 형태로 숫자들을 배열하는 것이 모래시계 알고리즘이다.
안타깝게도 int 배열에서는 빈공간을 출력하지는 못한다. 아무것도 채워지지 않은 공간은
null로 처리되어 출력되기 때문인데, 그런 상황을 피하고자 빈공간을 0으로 채웠다.

 


 

 아래는 모래시계 알고리즘을 구현한 소스코드이다.

 

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
public static void main(String[] args) 
    {
        int row = 7;
        int line = 7;
        
        int[][] a = new int[row][line];
 
        int c = (row/2)+1;
        int t, j, q = 0;
        int small = 1;
        int large = line;
 
        for(t = 0; t < row; t ++){
            q = small;
 
            if(small>1for(int y = 0; y < small-1; y++) a[t][y] = 0
            
            for(j = small-1; j<large; j++){
                a[t][j] = q;
                q = q+1;
            } 
 
            if(large<line) for(int z = large; z < line; z ++) a[t][z] = 0;
            
            if(t+1<c){ 
                small = small + 1;
                large = large - 1;
            } else { 
                small = small - 1;
                large = large + 1;
            }
        }
 
        for(int i = 0; i < row; i ++){
            for(int k = 0; k < line; k ++){
                System.out.print(a[i][k]);
            }
            System.out.println();
        }
    }
 
cs

 

행과 열의 정보를 갖는 row 와 line은 Scanner 변수를 이용해 입력을 받아 사용할 수 있다.
다만 이 모래시계 알고리즘은 행과 열이 홀수여야만 정상적으로 출력된다.

변수가 어떻게 변하는지 출력이 어떻게 되는지 한번 직접 손으로 써보면서 하면 더욱 잘 이해가 된다.