class Solution {
public int[] solution(String[] wallpaper) {
int lux=0;
int luy=-1;
int rdx=0;
int rdy=0;
int minluy=0;
int maxrdy;
for (int i=0;i<wallpaper.length;i++) {
if (wallpaper[i].contains("#")) {
lux=i;
break;
}
}
for (int i=0;i<wallpaper.length;i++) {
if (wallpaper[i].contains("#")) {
if (luy==-1) {
minluy = wallpaper[i].indexOf("#");
luy = wallpaper[i].indexOf("#");
} else {
luy=wallpaper[i].indexOf("#");
if (minluy>luy) minluy=luy;
}
}
}
for (int i=0;i<wallpaper.length;i++) {
if (wallpaper[i].contains("#")) {
rdx=i+1;
}
}
for (int i=0;i<wallpaper.length;i++) {
if (wallpaper[i].contains("#")) {
maxrdy=wallpaper[i].lastIndexOf("#");
if (maxrdy>rdy) rdy=maxrdy;
}
}
int[] answer = {lux,minluy,rdx,rdy+1};
return answer;
}
}
lux는 처음 #를 발견한 wallpaper의 인덱스,
luy는 가장 빠른 순서에 있는 #의 인덱스,
rdx는 가장 나중에 #를 발견한 wallpaper의 인덱스,
rdy는 가장 나중 순서에 있는 #의 인덱스이다.
하나씩 for문을 돌리며 구해준 뒤 합쳐줬다.
문제는 길지만 어렵지 않았다.
하지만 풀고나서 다른 사람의 풀이를 보니, 난 어렵게 풀은 듯 했다.
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};
}
}
Integer.MAX_VALUE는 Java에서 int 데이터 타입의 최대값을 나타내는 상수이다.
Integer.MAX_VALUE는 반대.
이것과 Math.max, Math.min 을 활용하여 저렇게 손쉽게 값을 받아올 수 있었다.