문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
정수형 문자열의 행렬로 된 정사각형 지도가 있다. 지도의 각 칸은 깊이 값을 가지고 있다. 각 칸이 지도의 테두리에 없고 그 칸이 인접한 칸의 깊이가 작을 경우 그 칸을 지도의 구멍이라고 할 것이다. 두 칸은 공통된 측면 또는 가장자리가 있으면 인접한다.
지도에서 모든 구멍을 찾고, 해당 깊이를 대문자 X로 바꿔라.
grid = ['989', '191', '111']
grid가 재배치 되어있다.
989
191
111
반환:
989
1X1
111
가운데 칸은 가장자리의 칸[8, 1, 1, 1]보다 깊다. 위쪽 두 모서리의 깊은 칸은 가운데 칸과 가장자리를 공유하지 않고 테두리 칸 중 어떤 것도 구멍이 되지 않는다.
cavityMap 함수를 완성해라.
cavityMap 함수는 아래와 같은 매개변수를 가지고 있다.
타입을 쉽게 비교하기 위해 정수형 리스트로 변환했고, 이것을 다시 문자열 리스트로 변환한다.
먼저 매개변수 grid를 정수형 리스트로 바꾼다.
int length = grid.size();
List<List<Integer>> tempGrid = new ArrayList<>();
for(int i = 0; i < length; i++){
List<Integer> temp = new ArrayList<>();
for(int j = 0; j < length; j++){
temp.add(Integer.valueOf(grid.get(i).charAt(j) - 48));
}
tempGrid.add(temp);
}
그리고 해당 칸의 값을 양 옆과 위아래 칸을 비교해서 구멍인지 확인하고 구멍이면 X로 치환한다.
List<String> result = new ArrayList<>();
for(int i = 0; i < tempGrid.size(); i++){
StringBuilder temp = new StringBuilder();
for(int j = 0; j < tempGrid.get(i).size(); j++){
if(i == 0
|| j == 0
|| i == tempGrid.size() - 1
|| j == tempGrid.size() - 1
){
temp.append(tempGrid.get(i).get(j));
continue;
}
if(
tempGrid.get(i).get(j) > tempGrid.get(i - 1).get(j)
&& tempGrid.get(i).get(j) > tempGrid.get(i + 1).get(j)
&& tempGrid.get(i).get(j) > tempGrid.get(i).get(j - 1)
&& tempGrid.get(i).get(j) > tempGrid.get(i).get(j + 1)
){
temp.append("X");
}else{
temp.append(tempGrid.get(i).get(j));
}
}
result.add(temp.toString());
}
return result;
public static List<String> cavityMap(List<String> grid) {
int length = grid.size();
List<List<Integer>> tempGrid = new ArrayList<>();
for(int i = 0; i < length; i++){
List<Integer> temp = new ArrayList<>();
for(int j = 0; j < length; j++){
temp.add(Integer.valueOf(grid.get(i).charAt(j) - 48));
}
tempGrid.add(temp);
}
List<String> result = new ArrayList<>();
for(int i = 0; i < tempGrid.size(); i++){
StringBuilder temp = new StringBuilder();
for(int j = 0; j < tempGrid.get(i).size(); j++){
if(
i == 0
|| j == 0
|| i == tempGrid.size() - 1
|| j == tempGrid.size() - 1
){
temp.append(tempGrid.get(i).get(j));
continue;
}
if(
tempGrid.get(i).get(j) > tempGrid.get(i - 1).get(j)
&& tempGrid.get(i).get(j) > tempGrid.get(i + 1).get(j)
&& tempGrid.get(i).get(j) > tempGrid.get(i).get(j - 1)
&& tempGrid.get(i).get(j) > tempGrid.get(i).get(j + 1)
){
temp.append("X");
}else{
temp.append(tempGrid.get(i).get(j));
}
}
result.add(temp.toString());
}
return result;
}