자바에서, 예를 들어 지도인 map
이 있고, 여기에서 "옷"
이 사람인 경우 그 사람 주변(상하좌우, 동서남북)에 무엇이 있는지 탐색하는 예제입니다.
dx
, dy
배열을 설정하고 (예제에서는 dir
라는 이름의 2차원 int
배열로 했습니다.) 맵을 2중 for
문을 돌면서 사람("옷"
)을 만나면 그 안에서 또 4번 반복하는 for
문을 실행해 주변에 무엇이 있는지 확인합니다.
dx
(dir[0]
), dy
(dir[1]
)의 값에 따라 탐색 방향이 시계방향(ESWN), 반시계방향(ENWS), 상하우좌(NSEW) 세 가지로 나뉠 수 있습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} | |
} |
0개의 댓글