본문 바로가기
Algorithm

n*n배열을 숫자로 위아래로 반복하며 S자 모양으로 채우기

by BeGeek 2015. 4. 9.

n 길이를 지정하면 n*n크기 배열에 숫자를 위아래로 반복하며 S자 모양으로 채우기

NumberSshape.java

 
public class NumberSshape {

 /**
 * NumberSshape
 * n*n배열을 숫자로 위아래로 반복하며 S자 모양으로 채우기
 *
 * 1 10 11 20 21
 * 2  9 12 19 22
 * 3  8 13 18 23
 * 4  7 14 17 24
 * 5  6 15 16 25
 * 
 **/
 
 int [][] map;  //숫자를 채울 배열
 int n = 5;   //배열길이
 int cnt = 1; //채울 숫자
 
 //생성자
 public NumberSshape(){
  map = new int[n][n];
 }
 
 //숫자 채우기
 public void numberFill(int a, int b){
  
   while(true){ 
  if(a < n){
  
   while(a < n){
    map[a++][b] = cnt++;
   }
  }else if(a == n){
   
   //마지막행 왔을때 열 우측 이동
   b++;
   
   while(a > 0){
    map[--a][b] = cnt++;
   }
   
   //처음행 왔을때 열 우측 이동
   if(a == 0 )b++;
  }
  
  //마지막 좌표가 0에서 숫자로 채워지면 끝
  if(map[n-1][n-1] != 0)return;
   }
 }
 
 //map출력
 public void printMap(){
  
  for(int i=0; i < map.length; i++){
   for(int j=0; j < map[0].length; j++){
    
    System.out.printf("%3d",map[i][j]);
    if(j == map[0].length-1){
     System.out.println();
    }
   }
  }
 }
 
 //실행
 public static void main(String[] args) {

  NumberSshape nss = new NumberSshape();
  nss.numberFill(0,0);
  nss.printMap();
 }

}

출력결과

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

 

댓글