본문 바로가기

개발/문제 풀이

[JAVA] 다차원배열 - 달팽이 만들기

안녕하세요. 쵸이킴 입니다.

다차원배열의 '달팽이' 형태를 자바 코딩으로 구현해 보았습니다.

 

* 특징 : 왼쪽부터 시계방향으로 가운데 25까지 뺑뺑이 도는 형태

( 아래 그림처럼 숫자를 채우면 됩니다)

다차원배열 - 달팽이 만들기

 

 

*솔루션

  • 우선 코딩을 먼저 보여드리겠습니다.
class snail {
    public static void main(String[] args) {
        int[][] snail = new int[5][5];
        
        int print = 5;
        int k = 1;
        int right = -1;
        int bottom = 0;
        int top = 1;
        
        for(int i=5; i>0; i--) {
            
            for(int j=0; j<print; j++) {
                right += top;
                snail[bottom][right] = k;
                k++;
            }
            
            print--;
            
            for(int j=0; j<print; j++) {
                bottom += top;
                snail[bottom][right] = k;
                k++;
            }
            
            top = top * (-1);
        }
        
        // 출력
        for(int i=0; i<snail.length; i++) {
            for(int j=0; j<snail[i].length; j++) {
        	    System.out.printf("%2d ", snail[i][j]);
            }
            System.out.println();
        }
    }
}

 

 

 

 

  • 코딩에서 print와 k 변수의 쓰임새는 아래와 같습니다.

달팽이 만들기 - 설명 1

 

 

  • i와 j는 for문 루프를 위한 변수입니다.
  • right와 bottom 변수의 쓰임새는 아래와 같습니다.

달팽이 만들기 - 설명 2

 

 

  • top의 쓰임새는 숫자를 채우는 '방향의 반전'을 위한 것입니다.

달팽이 만들기 - 설명 3

 

 

  • 코딩에서 흐름을 보면, 아래와 같이 됩니다. 쨘~!

  • 참고로, 이중 for문의 i는 '5세트'의 cycle을 의미합니다.
  • 이중 for문의 j는 총 '9번'의 cycle을 돌 수 있도록 설계되었습니다.

 

이해가 잘 되셨는지 모르겠네요.

문의사항은 댓글로 남겨주세요~!

 

( 2018. 9월경 작성됨. 블로그 새단장으로 인해 옮김 )

( 옮겼다가, 조금 더 쉽게 보이게 설명하고 싶어서 뜯어 고침! )

 

 

 

 

참고로 기존에는 아래와 같이 설명했었습니다. 코드만 달랑...

보는 사람도 못알아볼 것 같아서 그림으로 정리해봤다는 ㅋㅋ

ㅡ_ㅡ;;