https://school.programmers.co.kr/learn/courses/30/lessons/161990?language=java
class Solution {
public int[] solution(String[] wallpaper) {
int lux = 100, luy = 100, rdx = 100, rdy = 100;
for (int x = 0; x < wallpaper.length; x++) {
boolean flag = false;
for (int y = 0; y < wallpaper[0].length(); y++ ) {
if (wallpaper[x].charAt(y) == '#') {
lux = Math.min(lux, x);
luy = Math.min(luy, y);
System.out.println(lux + " " + luy);
flag = true;
break;
}
}
if (flag) break;
}
for (int x = wallpaper.length - 1; x >= 0; x--) {
boolean flag = false;
for (int y = wallpaper[0].length() - 1; y >= 0; y--) {
if (wallpaper[x].charAt(y) == '#') {
rdx = Math.min(rdx, x + 1);
rdy = Math.min(rdy, y + 1);
flag = true;
break;
}
}
if (flag) break;
}
int[] answer = new int[]{lux, luy, rdx, rdy};
return answer;
}
}
rdx, rdy는 가장 큰 값을 찾아야 한다. 하지만 끝에서부터 탐색해 #을 만나는 순간 멈춰버리면, 가장 큰 값을 구할 수 없다.
고로 완전탐색을 하며 각 좌표를 잡아야 한다.
class Solution {
public int[] solution(String[] wallpaper) {
int lux = Integer.MAX_VALUE, luy = Integer.MAX_VALUE;
int rdx = Integer.MIN_VALUE, rdy = Integer.MIN_VALUE;
for (int x = 0; x < wallpaper.length; x++) {
for (int y = 0; y < wallpaper[0].length(); y++) {
if (wallpaper[x].charAt(y) == '#') {
lux = Math.min(lux, x);
luy = Math.min(luy, y);
rdx = Math.max(rdx, x + 1);
rdy = Math.max(rdy, y + 1);
}
}
}
return new int[]{lux, luy, rdx, rdy};
}
}