[2021 카카오 채용연계형 인턴십] 거리두기 확인하기 - JAVA
1. ✅문제
개발자를 희망하는 죠르디가 카카오에 면접을 보러 왔습니다.
코로나 바이러스 감염 예방을 위해 응시자들은 거리를 둬서 대기를 해야하는데 개발 직군 면접인 만큼
아래와 같은 규칙으로 대기실에 거리를 두고 앉도록 안내하고 있습니다.
- 대기실은 5개이며, 각 대기실은 5x5 크기입니다.
- 거리두기를 위하여 응시자들 끼리는 맨해튼 거리1가 2 이하로 앉지 말아 주세요
- 단 응시자가 앉아있는 자리 사이가 파티션으로 막혀 있을 경우에는 허용합니다.
2. ✅아이디어
맨허튼 거리에 포함되는 거리
- 직선으로 2칸 이내
- 대각선으로 1칸 이내
맨허튼 거리에 포함되지만 허용되는 경우
- 직선으로 파티션이 있는 경우
- 파티션을 사이에 두고 앉은 경우
위의 경우는 응시자를 기준으로 정한 것. 관점을 조금 바꿔서 빈 테이블과 파티션도 포함해서 생각해보면,
- 빈 테이블 : 상/하/좌/우 응시자가 2명 있을 경우 - 실패 (응시자 간 직선으로 2칸 이내/대각선으로 1칸 이내)
- 응시자 : 상/하/좌/우 본인 포함 응시자가 2명 있을 경우 - 실패 (응시자 간 직선으로 2칸 이내)
- 파티션 : 상/하/좌/우 상관 없음 - 성공
파티션을 제외하고 빈 테이블, 응시자에 대한 주변검증으로 문제를 해결하면 된다.
3. ✅구현
public class CheckDistance {
public int[] solution(String[][] places) {
int[] answer = new int[5];
for(int i = 0; i < places.length; i++){
answer[i] = solution(places[i]); // places를 한줄씩 연산
}
return answer;
}
public int solution(String[] place){
String[][] detail = convertToPlaceDetail(place); //place를 2차원 배열로 변환
// P일 때 주변이 P면 실패, O일 때 주변에 P가 2개면 실패
for(int i = 0; i < detail.length; i++){
for(int j = 0; j < detail[i].length; j++){
int sum = detail[i][j].equals("P") ? 1: 0; //자기 자신이 P면 1부터 시작
if(detail[i][j].equals("X")) continue;
//상
if(i > 0){
sum += detail[i-1][j].equals("P") ? 1 : 0;
}
//하
if(i < detail.length - 1){
sum += detail[i+1][j].equals("P") ? 1 : 0;
}
//좌
if(j > 0){
sum += detail[i][j-1].equals("P") ? 1 : 0;
}
//우
if(j < detail[i].length - 1){
sum += detail[i][j+1].equals("P") ? 1 : 0;
}
if(sum >= 2){
return 0;
}
}
}
return 1;
}
public String[][] convertToPlaceDetail(String[] place) { //place를 2차원 배열로 변환
String[][] detail = new String[5][5];
for(int i = 0; i < place.length; i++){
String element = place[i];
for(int j = 0; j < element.length(); j++){
detail[i][j] = element.charAt(j)+"";
}
}
return detail;
}
}
4. ✅마치며
문제들은 가끔 많은 내용을 제공하는 척 하면서 문제풀이를 더 복잡하게 하는 것 같다. (Feat.맨허튼 거리)
Author And Source
이 문제에 관하여([2021 카카오 채용연계형 인턴십] 거리두기 확인하기 - JAVA), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cgw981/2021-카카오-채용연계형-인턴십-거리두기-확인하기-JAVA저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)