



class Solution {
public int[] solution(String[] wallpaper) {
int[] answer = new int[4]; // 1
int x_min = 51;
int x_max = 0;
int y_min = 51;
int y_max = 0;
int[][] list = new int[wallpaper.length][wallpaper[0].length()];
for (int i = 0; i < wallpaper.length; i++) { // 2
for (int j = 0; j < wallpaper[i].length(); j++) {
if (wallpaper[i].charAt(j) == '#') list[i][j] = 1;
else list[i][j] = 0;
}
}
for (int i = 0; i < list.length; i++) { // 3
for (int j = 0; j < list[i].length; j++) {
if (list[i][j] == 1) {
x_min = Math.min(x_min, j);
y_min = Math.min(y_min, i);
break;
}
}
}
for (int i = list.length - 1; i >= 0; i--) { // 4
for (int j = list[i].length - 1; j >= 0; j--) {
if (list[i][j] == 1) {
x_max = Math.max(x_max, j + 1);
y_max = Math.max(y_max, i + 1);
break;
}
}
}
answer[0] = y_min; // 5
answer[1] = x_min;
answer[2] = y_max;
answer[3] = x_max;
return answer;
}
}
1차원의 String 배열에서 특정한 값만 찾는 문제는 2차원의 int 배열에서 찾는 것과 비슷하다고 생각한다. 위 문제는 파일을 모두 선택할 수 있는 사각형의 왼쪽 위 모서리와 오른쪽 아래 모서리의 좌표를 구하는 것이다.
예를 들어, 입출력 예 1번의 경우 이런 식의 2차원 배열이 만들어진다.
01000
00100
00010
class Solution {
public int[] solution(String[] wallpaper) {
int minX = Integer.MAX_VALUE;
int minY = Integer.MAX_VALUE;
int maxX = Integer.MIN_VALUE;
int maxY = Integer.MIN_VALUE;
for(int i=0; i< wallpaper.length;i++ ){
for(int j=0; j<wallpaper[i].length();j++){
if(wallpaper[i].charAt(j)=='#'){
minX = Math.min(minX,i);
minY = Math.min(minY,j);
maxX = Math.max(maxX,i);
maxY = Math.max(maxY,j);
}
}
}
return new int[]{minX,minY,maxX+1,maxY+1};
}
}