2024. 6. 11. 23:32
문제 제한 사항
문제 해결 아이디어
맨하탄 거리 구하는 공식
(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 |