자바에서, 예를 들어 지도인 map이 있고, 여기에서 "옷"이 사람인 경우 그 사람 주변(상하좌우, 동서남북)에 무엇이 있는지 탐색하는 예제입니다.

dx, dy 배열을 설정하고 (예제에서는 dir라는 이름의 2차원 int 배열로 했습니다.) 맵을 2중 for문을 돌면서 사람("옷")을 만나면 그 안에서 또 4번 반복하는 for문을 실행해 주변에 무엇이 있는지 확인합니다.

dx(dir[0]), dy(dir[1])의 값에 따라 탐색 방향이 시계방향(ESWN), 반시계방향(ENWS), 상하우좌(NSEW) 세 가지로 나뉠 수 있습니다.

 


public class FourDirection {
public static int[][] getDirection(int select) {
if(select == 3) {
// 방향 설정: 반시계 방향 (ENSW)
return new int[][]{
{0, -1, 0, 1},
{1, 0, -1, 0}
};
} else if(select == 2) {
// 방향 설정: 시계 방향 (ESWN)
return new int[][]{
{0, 1, 0, -1},
{1, 0, -1, 0}
};
} else {
// 방향 설정: 간편한 사용법 (NSEW)
return new int[][]{
{-1, 1, 0, 0},
{0, 0, 1, -1}
};
}
}
public static void main(String[] args) {
String[][] map = {
{".", ".", ".", ".", "."},
{".", ".", "N", ".", "."},
{".", "W", "옷", "E", "."},
{".", ".", "S", ".", "."},
{".", ".", ".", ".", "."}
};
int r = map.length, c = map[0].length;
// 배열 표시
for(int i = 0; i < r; i++) {
for(int j = 0; j < c; j++) {
System.out.print(map[i][j]);
}
System.out.println();
}
System.out.println();
for(int d = 1; d <= 3; d++) {
int[][] dir = getDirection(d);
for(int i = 0; i < r; i++) {
for(int j = 0; j < c; j++) {
if(map[i][j].equals("옷")) {
for(int w = 0; w < 4; w++) {
// 4번 돌면서 ii, jj에 사방향을 지정
int ii = i + dir[0][w];
int jj = j + dir[1][w];
// 배열 인덱스가 마이너스가 되거나 행열을 초과하는 현상을 방지
if(ii < 0 || ii == r || jj < 0 || jj == c) {
continue;
}
System.out.print(map[ii][jj]);
}
}
}
}
System.out.println();
}
}
}

 

문의 | 코멘트 또는 yoonbumtae@gmail.com




0개의 댓글

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다