문제 링크
거리두기 확인하기
풀이
- dfs문제 일거라곤 생각했는데, 구현을 못했고..
- 나름 규칙성이랍시고 찾았는데, 웬걸...그게 풀렸다.
- 거리두기를 지키지 않는 상황을 생각해보면 P끼리 접해있는 경우, 그리고 O 에 P가 2개이상이 접해있는 경우다.
- POP를 사방면에서 그려보면 조건에 성립되지 않는다.
- 그래서 그걸로 for문을 통해 완전탐색? 이라고 해야할지 모르겠지만 그걸로 풀었다.
class Solution {
public int[] solution(String[][] places) {
int[] answer = new int[places.length];
for (int i = 0; i < places.length; i++) {
String[][] arr = new String[5][5];
for (int j = 0; j < places[i].length; j++) {
String[] splited = places[i][j].split("");
arr[j] = splited;
}
answer[i] = check(arr);
}
return answer;
}
public int check(String[][] arr) {
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, -1, 0, 1};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j].equals("X")) continue;
if (arr[i][j].equals("O")) {
int cnt = 0;
for (int k = 0; k < dx.length; k++) {
if (i + dx[k] >= 0 && j + dy[k] >=0 && i + dx[k] < 5 && j + dy[k] < 5) {
if (arr[i + dx[k]][j + dy[k]].equals("P")) cnt++;
if (cnt >= 2) return 0;
}
}
}
if (arr[i][j].equals("P")) {
for (int k = 0; k < dx.length; k++) {
if (i + dx[k] >= 0 && j + dy[k] >=0 && i + dx[k] < 5 && j + dy[k] < 5) {
if(arr[i + dx[k]][j + dy[k]].equals("P")) return 0;
}
}
}
}
}
return 1;
}
}