본문 바로가기
lecture.js/algorithm.log

#003 달팽이 배열

by malda 2017. 7. 10.

문제) 5X5배열을 이용하여 위와 같은 배열을 만드시오.

1
2
3
4
5
16
17
18
19
6
15
24
25
20
7
14
23
22
21
8
13
12
11
10
9
          


머리 뽀개지는줄 알았다.
이러한 알고리즘 구현문제는 규칙성을 파악하는게 가장 중요함

1번째 가로가 0, 1, 2, 3, 4가 채워짐 (총 5번)
2번째 세로가 1, 2, 3, 4가 채워짐 (총 4번)

3번째 가로가 3, 2, 1, 0으로 채워짐 (총 4번)
4번째 세로가 3, 2, 1 으로 채워짐 (총 3번)

5번째 가로가 1, 2, 3 으로 채워짐 (총 3번)
6번째 세로가 2, 3 으로 채워짐 (총 2번)

7번째 가로가 2, 1 으로 채워짐 (총 2번)
8번째 세로가 1으로 채워짐 (총 1번)

9번째 가로가 1으로 채워짐

규칙성 1) 
가로 > 세로 순서로 방향이 바뀌는 것을 확인할 수 있다

규칙성 2)
5(가로)부터 시작해서 4(세로), 4(가로) > 3(세로), 3(가로) > 2(세로), 2(가로)> 1(세로), 1(가로) 형태로 줄어드는 것을 확인할 수 있다.
*가로가 5로 시작해서 다음 세로가 4로 줄어드는 것으로 보아 증감식은 둘 사이에 있음을 의미한다.


*여기서 주의할점은 가로 인덱스를 -1로 지정해주는 것과
방향에 맞게 먼저 증가를 한 후에 배열에 접근하는 것이 중요하다.

package dataStructure.prediction;

public class SnailArray {

    private int[][] snailArray = new int[5][5];
   
    public SnailArray() {
        // TODO Auto-generated constructor stub
    }
   
    public void execute() {
        int limit = 5;
        int row = 0;
        int col = -1;
        int direction = 1;
        int number = 1;
        while(true) {
            if(limit == 0) {
                break;
            }
            for(int i=0;i<limit;i++) {
               col += direction;
               snailArray[row][col] = number;
               number++;
            }
           
            limit--;
           
            for(int j=0;j<limit;j++) {
                row += direction;
                snailArray[row][col] = number;
                number++;
            }
            direction *= -1;
        }
    }
   
    public void print() {
        for(int i=0; i<5;i++) {
            for(int j=0; j<5; j++) {
                System.out.printf("%2d ",snailArray[i][j]);
            }
            System.out.println();
        }
    }
   
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SnailArray snailArray = new SnailArray();
        snailArray.execute();
        snailArray.print();
    }

}


'lecture.js > algorithm.log' 카테고리의 다른 글

#006 열우선 배열  (0) 2017.07.10
#005 모래시계 배열  (0) 2017.07.10
#004 ㄹ 배열  (0) 2017.07.10
#002 등차 수열 구하기  (0) 2017.07.10
#001 기본 수열 구하기  (0) 2017.07.10