본문 바로가기

Programmers/Level2

거리두기 확인하기

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-1002-20011-1-1 };
    private static int[] addCol = { 00-1100-22-11-11 };
 
    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