equals**
아이디어는 빨리 떠올렸으나,, 구현이 너무 느려서 시간이 걸렸다.
정말 훈련으로 구현시간을 줄일 수 있는것일까?
import java.util.*;
class Solution {
static int[] dis_x={-1,0,1,0};
static int[] dis_y={0,1,0,-1};
public ArrayList<Integer> solution(String[][] places) {
ArrayList<Integer> answer = new ArrayList<>();
for(int n=0;n<5;n++){
answer.add(valid(n,places));
}
return answer;
}
public int valid(int n,String[][] places){
String [][] map=new String[5][5];
for(int i=0;i<5;i++){
map[i]=places[n][i].split("");
}
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(map[i][j].equals("P")){
for(int k=0;k<4;k++){
int nx=i+dis_x[k];
int ny=j+dis_y[k];
if(0<=nx&&nx<5&&0<=ny&&ny<5){
if(map[nx][ny].equals("P")){
return 0;
}else if(map[nx][ny].equals("O")){
if(nx==i){//행이같을 경우 (양옆에 O가 있을경우)
//좌 혹은 우로 2칸갔을때 P가 있을 경우.
int temp=ny-j;
if(0<=ny+temp&&ny+temp<5){
if(map[nx][ny+temp].equals("P")){
return 0;
}
}
/*
밑에 두개는 대각선 위치에 P가 있는지 알아보는 경우
**/
if(0<=nx+1&&nx+1<5){
if(map[nx+1][ny].equals("P")){
return 0;
}
}
if(0<=nx-1&&nx-1<5){
if(map[nx-1][ny].equals("P")){
return 0;
}
}
}else{//열이 같을 경우 (상하에 o가 있을 경우 )
//상 혹은 하로 2칸갔을때 P가 있을 경우.
int temp=nx-i;
if(0<=nx+temp&&nx+temp<5){
if(map[nx+temp][ny].equals("P")){
return 0;
}
}
/*
밑에 두개는 대각선 위치에 P가 있는지 알아보는 경우
**/
if(0<=ny+1&&ny+1<5){
if(map[nx][ny+1].equals("P")){
return 0;
}
}
if(0<=ny-1&&ny-1<5){
if(map[nx][ny-1].equals("P")){
return 0;
}
}
}
}
}
}
}
}
}
return 1;
}
}