전체 코드

    3장/거리두기_확인하기.java

    public class Solution {
        private static final int dx[] = {0, -1, 1, 0};
        private static final int dy[] = {-1, 0, 0, 1};
    
        private boolean isNextToVolunteer(char[][] room, int x, int y, int exclude) {
            for (int d = 0; d < 4; d++) {
                if (d == exclude) continue;
    
                int nx = x + dx[d];
                int ny = y + dy[d];
                if (ny < 0 || ny >= room.length || nx < 0 || nx >= room[ny].length)
                    continue;
                if (room[ny][nx] == 'P') return true;
            }
            return false;
        }
    
        private boolean isDistanced(char[][] room, int x, int y) {
            for (int d = 0; d < 4; d++) {
                int nx = x + dx[d];
                int ny = y + dy[d];
                if (ny < 0 || ny >= room.length || nx < 0 || nx >= room[ny].length)
                    continue;
                switch (room[ny][nx]) {
                    case 'P': return false;
                    case 'O':
                        if (isNextToVolunteer(room, nx, ny, 3 - d)) return false;
                        break;
                }
            }
            return true;
        }
    
        private boolean isDistanced(char[][] room) {
            for (int y = 0; y < room.length; y++) {
                for (int x = 0; x < room[y].length; x++) {
                    if (room[y][x] != 'P') continue;
                    if (!isDistanced(room, x, y)) return false;
                }
            }
            return true;
        }
    
        public int[] solution(String[][] places) {
            int[] answer = new int[places.length];
            for (int i = 0; i < answer.length; i++) {
                String[] place = places[i];
                char[][] room = new char[place.length][];
                for (int j = 0; j < room.length; j++) {
                    room[j] = place[j].toCharArray();
                }
                if (isDistanced(room)) {
                    answer[i] = 1;
                } else {
                    answer[i] = 0;
                }
            }
            return answer;
        }
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.