문제

시계방향으로 달팽이를 그려라

결과값

   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
   

참고

http://gompangs.tistory.com/24

  • 방향을 바꿀 때 마다 x, y열의 그리기는 한칸 씩 줄어든다.
  • 방향을 바꾸는 변수 필요

문제풀이


package algo;

public class banggle {

	public static void main(String[] args)
	{
		int count = 5;							// 한줄에 몇번 돌 것인가
		int max_size = count;
		int value = 0;
		int arr[][] = new int[count][count];
		int x = -1;								// 좌표 0,0 ~ 0,4 까지 그리고 나서 다음 y줄을 그리려고 하면 0,5 좌표라서 												  // 되어서 array size 초과 에러가 되므로
												// 배열초과 에러난다. x시작값이 -1인게 중요하다.
		int y = 0;
		
		int pos = 1;
		for(int i = 0; i < max_size; ++i)
		{	
			for(int xx = 0; xx < count; ++xx)
			{
				x+=pos;							// pos는 방향을 정하는 변수다
				++value;
				arr[y][x] = value;				
			}
			
			--count;							// 한줄에 그리는 횟수를 줄인다.
			
			for(int yy = 0; yy < count; ++yy)
			{
				y+=pos;
				++value;
				arr[y][x] = value;
			}
			
			// 방향 바꾸기
			pos = (pos == 1) ? -1 : 1;
			
		}
			
		// 2차원 배열 출력
		for(int i = 0; i < max_size; ++i)
		{
			for(int j = 0; j < max_size; ++j)
			{
				System.out.printf("%5d", arr[i][j]);
			}
			
			System.out.print("\n");
		}
	}

}