[프로그래머스] Lv.2 거리두기 확인하기 (Java)

2023. 7. 26. 16:38·Algorithms(CT)/Programmers

https://school.programmers.co.kr/learn/courses/30/lessons/81302

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

다음과 같은 규칙으로 대기실에 거리를 두고 앉도록 안내합니다.

1. 대기실은 5개이며, 각 대기실은 5x5 크기입니다.

2. 거리 두기를 위하여 응시자들끼리는 맨해튼 거리가 2 이하로 앉지 말아 주세요.

3. 단 응시자가 앉아있는 자리 사이가 파티션으로 막혀 있을 경우에는 허용합니다.

각 대기실별로 거리 두기를 지키고 있으면 1을, 한 명이라도 지키지 않고 있으면 0을 배열에 담아 return 하도록 solution함수를 완성해 주세요.


📗 풀이과정

1. 맨해튼 거리가 2 이하인 경우는 아래의 그림처럼 3가지로 나눌 수 있습니다.

2. (1)의 경우에는 대기자 P가 있으면 거리 두기를 지키지 않은 것으로 result배열에 0을 넣어줍니다.

 

3. (2)의 경우에는 색칠된 자리에 P가 있다면, P와 색칠된 칸 사이에 파티션 X가 있어야 합니다.

만약 그렇지 않다면 result배열에 0을 넣어주고 더 이상 검사하지 않습니다.

 

4. (3)의 경우에는 P에서 색칠된 칸에 도달하기까지의 칸이 모두 X로 파티션이어야 합니다.

5. 5x5 크기의 대기실 자리를 모두 돌면서 대기자 P가 있으면 2-4의 조건을 검사해, 하나라도 어기게 된다면 0을, 모두 거리 두기를 지키고 있다면  1을 result에 반환하면 됩니다.


전체코드

class Solution {
    public int[] solution(String[][] places) {
        int[] answer = new int[places.length];
        
        for(int i=0;i<places.length;i++) answer[i]=checkDis(places[i]);
        
        return answer;
    }
    //거리두기를 하고 있는지 확인
    int checkDis(String[] place){
        
        int[] dx={1,-1,0,0};//상하좌우
        int[] dy={0,0,1,-1};
        
        int[] dx2={1,1,-1,-1};//대각선
        int[] dy2={-1,1,-1,1};
        
        for(int x=0;x<5;x++){
            for(int y=0;y<5;y++){
                if(place[x].charAt(y)=='P'){//대기자를 확인하면 주위에 대기자가 있는지 확인
                    //상하좌우에 대기자 있는지 확인
                    for(int dir=0;dir<4;dir++){
                        int nx=x+dx[dir];
                        int ny=y+dy[dir];
                        
                        //(1) 거리=1인 상하좌우에 대기자 있는지 확인
                        if(nx>=0 && nx<5 && ny>=0 && ny<5 && place[nx].charAt(ny)=='P')
                            return 0;
                        
                        //상하좌우(거리=1)에 파티션이 없을 때
                        if(nx>=0 && nx<5 && ny>=0 && ny<5 && place[nx].charAt(ny)!='X'){
                            // (2) 거리=2인 곳에 대기자 있는지 확인
                            nx+=dx[dir];
                            ny+=dy[dir];
                            
                            if(nx>=0 && nx<5 && ny>=0 && ny<5 && place[nx].charAt(ny)=='P')
                                return 0;
                        }
                    }
                    
                    // (3) 대각선에 거리두기 하고 있는지 확인
                    for(int dir=0;dir<4;dir++){
                        int nx=x+dx2[dir];
                        int ny=y+dy2[dir];
                        
                        //대기자 있으면, 파티션이 주위에 있는지 확인
                        if(nx>=0 && nx<5 && ny>=0 && ny<5 && place[nx].charAt(ny)=='P'){
                            if(place[x].charAt(ny)!='X' || place[nx].charAt(y)!='X')
                                return 0;
                        }
                    }
                    
                }
            }
        }
        return 1;//거리두기 잘 됨.
    }
}

'Algorithms(CT) > Programmers' 카테고리의 다른 글

[프로그래머스] Lv.2 멀쩡한 사각형 (Java)  (0) 2023.07.27
[프로그래머스] Lv.2 숫자 카드 나누기 (Java)  (0) 2023.07.27
[프로그래머스] Lv.2 점 찍기 (Java)  (0) 2023.07.21
[프로그래머스] Lv.2 호텔 대실 (Java)  (0) 2023.07.21
[프로그래머스]Lv.2 배달 (Java)  (0) 2023.07.20
'Algorithms(CT)/Programmers' 카테고리의 다른 글
  • [프로그래머스] Lv.2 멀쩡한 사각형 (Java)
  • [프로그래머스] Lv.2 숫자 카드 나누기 (Java)
  • [프로그래머스] Lv.2 점 찍기 (Java)
  • [프로그래머스] Lv.2 호텔 대실 (Java)
gwee_99
gwee_99
bE bETTER!
  • gwee_99
    얼렁이와 뚱땅이
    gwee_99
  • 전체
    오늘
    어제
    • ====Category====
      • Algorithms(CT)
        • Programmers
        • Baekjoon
        • Goorm
      • Web
        • Error 해결
      • BackEnd
        • Spring
        • JPA
      • FrontEnd
        • HTML.CSS
        • JavaScript
      • Language
        • Java
      • Cloud
      • CSTS
      • Books
        • IT 5분 잡학사전
      • 일상
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    Lv.1
    DP
    BOJ
    IT 잡학사전
    제대로 파는 자바스크립트
    호텔 대실
    백준
    LV.2
    lv.4
    HTML
    존안님
    BFS
    노마드코더
    개발자북클럽
    Greedy
    그리디
    스택
    DFS
    Til
    구름
    LV.3
    java
    프로그래머스
    lv2
    인프런
    따라하며 배우는 html css
    자바
    IT 5분 잡학사전
    구름톤 챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gwee_99
[프로그래머스] Lv.2 거리두기 확인하기 (Java)
상단으로

티스토리툴바