본문 바로가기

JAVA/알고리즘 예제

[JAVA] 달팽이 로직


package javalesson.com.javalesson.ch01test;


public class T01Snail {

    public static void main(String[] args){

        

        int n;//달팽이의 차수

        int row,col;//행 열

        int k=0;//달팽이 안쪽으로 들어갈 수록 감소되는 행,열 만큼 깍아줄 변수

        

        int snail[][]= new int [5][5];//달팽이 배열

        

        int i =1;//달팽이 배열에 넣을 숫자

              

        for(n=5; n>0;n-=2){//달팽에 차수에 따라 몇번 반복할지

            for(col=0;col<n;col++){

                snail[k][k+col]=i;

                i++;

                        

            }

            for(row=1;row<n;row++){

                snail[k+row][5-k-1]=i;

                i++;

            }

            for(col=1;col<n;col++){

                snail[k+row-1][5-k-col-1]=i;

                i++;

            }

            for(col=1;col<n-1;col++){

                snail[5-k-col-1][k]=i;

                i++;

            }   

            k++;

        }

        

        //출력

        for(row=0;row<5;row++){

            for(col=0;col<5;col++){

                System.out.printf("%3d",snail[row][col]);

            }

            System.out.println("");

        }

    }

}



package jungbo;


import java.util.InputMismatchException;

import java.util.Scanner;


public class T12Snail {

    public static void main(String[] args){

    Scanner scan = new Scanner(System.in);

    int deg;

    while(true){

    System.out.print("달팽이의 차수를 입력하세요 : ");

    try{

    deg = scan.nextInt();

    break;

    }catch(InputMismatchException e){

    System.out.println("숫자만 입력해야 합니다.");

    }

    }

    scan.close();

        int n;

        int row,col;

        int k=0;

        

        int snail[][]= new int[deg][deg];

        

        int i =1;

              

        for(n=deg; n>0;n-=2){

            for(col=0;col<n;col++){

                snail[k][k+col]=i;

                i++;           

            }

            for(row=1;row<n;row++){

                snail[k+row][deg-k-1]=i;

                i++;

            }

            for(col=1;col<n;col++){

                snail[k+row-1][deg-k-col-1]=i;

                i++;

            }

            for(col=1;col<n-1;col++){

                snail[deg-k-col-1][k]=i;

                i++;

            }   

            k++;

        }

        

        //출력

        for(row=0;row<deg;row++){

            for(col=0;col<deg;col++){

                System.out.printf("%3d",snail[row][col]);

            }

            System.out.println();

        }

    }

}


스위치(sw)변수를 사용하여 로직을 간략화 해보자

package jungbo;


import java.util.InputMismatchException;

import java.util.Scanner;


public class T12Snail {

    public static void main(String[] args){

    Scanner scan = new Scanner(System.in);

    int deg;

    while(true){

    System.out.print("달팽이의 차수를 입력하세요 : ");

    try{

    deg = scan.nextInt();

    break;

    }catch(InputMismatchException e){

    System.out.println("숫자만 입력해야 합니다.");

    }

    }

    scan.close();

    int print = deg;

        int row=0,col=-1;

        int sw=1;

        int snail[][]= new int[deg][deg];

        

        int i =1;

        

        while(true){

        for(int cnt=0;cnt<deg;cnt++){

        col=col+sw;

        snail[row][col]=i++;

        }

        deg=deg-1;

        if(deg==0)

        break;        

        for(int cnt=0;cnt<deg;cnt++){

        row=row+sw;

        snail[row][col]=i++;

        }

        sw=sw*(-1);

        }

        

        //출력

        for(row=0;row<print;row++){

            for(col=0;col<print;col++){

                System.out.printf("%3d",snail[row][col]);

            }

            System.out.println();

        }

    }

}


'JAVA > 알고리즘 예제' 카테고리의 다른 글

[JAVA] 선택 정렬(Selection Sort)  (1) 2016.08.31
[JAVA] 마방진  (1) 2016.08.31
[JAVA] 모래시계 찍기  (1) 2016.08.30
[JAVA] 다이아몬드 찍기  (1) 2016.08.30
[JAVA] 5x5 사각형(1~25)  (3) 2016.08.29