1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
class Solution {
private static int[] addRow = { 1, -1, 0, 0, 2, -2, 0, 0, 1, 1, -1, -1 };
private static int[] addCol = { 0, 0, -1, 1, 0, 0, -2, 2, -1, 1, -1, 1 };
public static int placeCheck(String[] place) {
char[][] cArr = new char[place.length][place[0].length()];
for (int i = 0; i < place.length; i++)
cArr[i] = place[i].toCharArray();
// P 탐색
for (int i = 0; i < cArr.length; i++) {
for (int j = 0; j < cArr[0].length; j++) {
if (cArr[i][j] == 'P') {
if (!isCorrect(cArr, i, j))
return 0;
}
}
}
return 1;
}
public static boolean isCorrect(char[][] cArr, int row, int col) {
for (int i = 0; i < addRow.length; i++) {
int nextRow = row + addRow[i];
int nextCol = col + addCol[i];
// 범위 초과 시
if (nextRow < 0 || nextRow >= cArr.length || nextCol < 0 || nextCol >= cArr[0].length)
continue;
if (cArr[nextRow][nextCol] == 'P') {
// 상하좌우 탐색
if (i < 4)
return false;
// 2칸 거리의 상하좌우 탐색
else if (i < 8) {
if (cArr[nextRow - addRow[i] / 2][nextCol - addCol[i] / 2] != 'X')
return false;
// 좌상, 우상, 좌하, 우하 탐색
} else if (cArr[row][nextCol] != 'X' || cArr[nextRow][col] != 'X')
return false;
}
}
return true;
}
public int[] solution(String[][] places) {
int[] answer = new int[places.length];
for (int i = 0; i < places.length; i++) {
answer[i] = placeCheck(places[i]);
}
return answer;
}
}
|
cs |
탐색해야 할 위치를 2개의 2차원 배열을 통해 순차적으로 탐색하도록 하였다.
'Programmers > Level2' 카테고리의 다른 글
가장 먼 노드 (0) | 2021.08.08 |
---|---|
행렬 테두리 회전하기 (0) | 2021.08.07 |
배달 (0) | 2021.08.06 |
adenCase 문자열 만들기 (0) | 2021.08.06 |
순위 검색 (0) | 2021.08.06 |