N By N 배열의 숫자가 빙빙 돌아가며 찍히는 형태로 출력하는것..
점심시간에 잠깐 짬내서 날 코딩 ㄱㄱ...
1 16 15 14 13
2 17 24 23 12
3 18 25 22 11
4 19 20 21 10
5 6 7 8 9
위와 같은 형태로 출력되면 성공.......
아래는 코드 . 전문..
public class Snail {
public void run(int size) {
int[][] matrix = new int[size][size];
boolean xToRight = false;
boolean yToDown = true;
// first line (x 로 기록)
for (int x = 1; x <= size; x++) {
matrix[x - 1][0] = x;
}
int leftSize = size + 1;
int loopCount = 0;
int lastValue = size + 1;
int xPos = size;
int yPos = 1;
while (leftSize-- > 0) {
loopCount++;
// Y 방향 값
for (int innerLoop = 0; innerLoop < (size - loopCount); innerLoop++) {
if (yToDown)
yPos++;
else
yPos--;
matrix[xPos - 1][yPos - 1] = lastValue++;
}
yToDown = !yToDown;
// X 방향 값
for (int innerLoop = 0; innerLoop < (size - loopCount); innerLoop++) {
if (xToRight)
xPos++;
else
xPos--;
matrix[xPos - 1][yPos - 1] = lastValue++;
}
xToRight = !xToRight;
}
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
System.out.printf("%3d", matrix[i][j]);
}
System.out.println();
}
System.out.println();
}
public static void main(String[] args) {
Snail s = new Snail();
s.run(5);
}
}
초기 1렬을 그대로 출력하고
x축 끝에서 만날시 방향 전환
y축 끝에서 만날시 방향 전환
대충 이런 느낌으로 작성하였습니다.
머리가 굳어가는 느낌에 가끔 기름칠.
1 32 31 30 29 28 27 26 25
2 33 56 55 54 53 52 51 24
3 34 57 72 71 70 69 50 23
4 35 58 73 80 79 68 49 22
5 36 59 74 81 78 67 48 21
6 37 60 75 76 77 66 47 20
7 38 61 62 63 64 65 46 19
8 39 40 41 42 43 44 45 18
9 10 11 12 13 14 15 16 17
9에 대한 출력값...