💡사실 2차원 배열 탐색은 알고리즘 문제를 풀기 위한 아이디어 중 하나이다. 완전탐색이나 그리디 같은 '알고리즘' 분류에 포함되는 것은 아니다.
// arr[N][N] 형태일 때
int[][] arr = {{1,2,3}, {4,5,6}, {7,8,9}};
int N = arr.length; //행
int M = arr[0].length; //열
// arr[N][] 형태일 때
int[][] arr = {{1,2}, {3,4,5,6}, {7,8,9}};
int N = arr.length;
for(int i=0; i<N; i++) {
int M = arr[i].length;
System.out.println(M);
}
// N*N 형태 순회
// 1. 행 우선 순회
for(int i=0; i<N; i++) {
for(int j=0; j<M; j++) {
System.out.printf("%2d", arr[i][j]);
}
System.out.println();
}
// 2. 행 역우선 순회 -1
for(int i=0; i<N; i++) {
for(int j=M-1; j>=0; j--) {
System.out.printf("%2d", arr[i][j]);
}
System.out.println();
}
// 3. 열 우선 순회
for(int i=0; i<N; i++) {
for(int j=0; j<M; j++) {
System.out.printf("%2d", arr[j][i]);
}
System.out.println();
}
for(int j=0; j<M; j++) {
for(int i=0; i<N; i++) {
System.out.printf("%2d", arr[i][j]);
}
System.out.println();
}
// 4. 열 역우선 순회
for(int i=0; i<M; i++) {
for(int j=N-1; j>=0; j--) {
System.out.printf("%2d", arr[j][i]);
}
System.out.println();
}
// 5. 지그재그 순회
// (1)
for(int i=0; i<N; i++) {
if(i%2==0) {
for(int j=0; j<M; j++) {
System.out.printf("%2d",arr[i][j]);
}
} else {
for(int j=M-1; j>=0; j--) {
System.out.printf("%2d",arr[i][j]);
}
}
System.out.println();
}
// (2)
for(int i=0; i<N; i++) {
if(i%2==0) {
for(int j=0; j<M; j++) {
System.out.printf("%2d",arr[i][j]);
}
} else {
for(int j=0; j<M; j++) {
System.out.printf("%2d",arr[i][M-1-j]);
}
}
System.out.println();
}
// (3)
for(int i=0; i<N; i++) {
for(int j=0; j<M; j++) {
if(i%2==0)
System.out.printf("%2d",arr[i][j]);
else
System.out.printf("%2d",arr[i][M-1-j]);
}
System.out.println();
}