문제 제한 사항

문제 해결 아이디어

맨하탄 거리 구하는 공식

(x1, y1)과 (x2, y2)가 있을 때 |x1-x2| + |y1-y2| 가 맨하탄 거리이다.

 

거리두기를 올바르게 지킨 경우는 두가지로 분리할 수 있다.

1. 맨하탄 거리가 3 이상일 경우

2. 맨하탄 거리가 2이지만, 파티션으로 막혀있는 경우

 

거리두기를 올바르게 지키지 않은 경우는

1. 맨하탄 거리가 1일 때

2. 맨하탄 거리가 2이고, 하나라도 빈 책상이 사이에 있는 경우

 

대기실별로 거리두기를 모두 지키고 있다면 1을, 한 명이라도 지키고 있지 않다면 0을 반환해야 한다.

 

존재하면 안되는 곳에 있는지만 체크하면 된다. 

 

안되는 예외 사항을 빠르게 발견해서 return 처리하면 답을 빠르게 구할 수 있을 줄 알았다.

근데 예외 사항이 생각보다 많았다. 일반적인 경우, 즉 일반식을 도출해서 구해야한다는 걸 깨달았다.

 

코드

input과 같은 2차원 배열을 또 다른 하나의 2차원 배열로 나눌때 사용되는 코드 템플릿

String[][] input = {
    {"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"}
 };


// 위와 같은 2차원 배열인데, 또 저기서 나눠줘야 할 때
for (int i=0; i<input.length; i++) {
    String[] place = input[i];
    char[][] room = new char[place.length][];
    for (int j=0; j<room.length; j++) {
        room[j] = place[j].toCharArray();
    }
 }

 

배운점

너무 오랜만에 코딩테스트 문제를 푸니깐 생각하기가 귀찮아진다.ㅜ,, 아직까지 다시 어떻게 시작해야하는지 감이 안와서 고민하는 시간을 가지고 결국엔 정답 보는 흐름대로만 풀고 있는데, 계속해서 도전은 해봐야할 것 같다.

'알고리즘' 카테고리의 다른 글

백준 - 색종이  (1) 2024.06.13
프로그래머스 - 삼각 달팽이  (1) 2024.06.09
프로그래머스 - 교점에 별 만들기  (2) 2024.06.08
비트마스크(1)  (0) 2023.03.14
그래프와 인접행렬  (0) 2022.12.11