코딩/알고리즘
[알고리즘] 프로그래머스 거리두기 확인하기 Java(자바)
유어노우
2022. 1. 13. 23:00
- 문제
https://programmers.co.kr/learn/courses/30/lessons/81302
코딩테스트 연습 - 거리두기 확인하기
[["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1]
programmers.co.kr
- 코드 설명
제대로된 알고리즘을 구현하지 못했습니다.
좌표문제에 특히 약점을 보이는 것 같네요... 다른 분들은 dfs로 많이 푸셨습니다.
class Solution {
public int[] solution(String[][] places) {
int[] answer = new int[places.length];
for(int i=0; i<places.length; i++){
String seats = "";
for(String str : places[i]){
seats = seats.concat(str);
}
if(checkValidate(seats) == true){
answer[i] = 1;
}
else
answer[i] = 0;
}
return answer;
}
private boolean checkValidate(String seats){
int i,idx;
for(idx = 0; idx<seats.length(); idx++){
if(seats.charAt(idx) == 'P'){
//좌
if(idx%5 >= 2 ){
String temp = seats.substring(idx-2,idx);
if(temp.contains("P") && temp.equals("PX") == false)
return false;
}
//우
if(idx%5 <= 2){
String temp = seats.substring(idx+1,idx+3);
if(temp.contains("P") && temp.equals("XP") == false )
return false;
}
//상
if(idx>9){
String temp = "";
temp = temp.concat(Character.toString(seats.charAt(idx-5))+Character.toString(seats.charAt(idx-10)) ) ;
if(temp.contains("P") && temp.equals("XP") == false ) return false;
}
//하
if(idx<15){
String temp = "";
temp = temp.concat(Character.toString(seats.charAt(idx+5)) +Character.toString(seats.charAt(idx+10)));
if(temp.contains("P") && temp.equals("XP") == false ) return false;
}
}
}
for(idx = 0, i=0; idx<19 ;idx++,i++){
String temp = seats.substring(idx,idx+2).concat(seats.substring(idx+5,idx+7));
if(temp.replaceAll("P","").length() <=2){
if(temp.equals("PXXP") == false && temp.equals("XPPX") == false){
return false;
}
}
if(i==3){
i = -1;
idx++;
}
}
return true;
}
}
- 결과