✅ 난이도 : LEVEL 1
✅ 문제
✅ 풀이 방법
package codingTest;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
String wallpaper[] = { "..........", ".....#....", "......##..", "...##.....", "....#....." };
int answer[] = {};
int answer1[] = { 0, 0, 0, 0 };
for (int i = 0; i < wallpaper.length; i++) {
if (wallpaper[i].contains("#")) {
answer1[0] = i;
answer1[2] = wallpaper.length;
break;
}
}
int min = 50;
for (int n = 0; n < wallpaper.length; n++) {
if (min > wallpaper[n].indexOf("#") && wallpaper[n].indexOf("#") != -1) {
min = wallpaper[n].indexOf("#");
}
}
answer1[1] = min;
int max = 0;
for (int i = 1; i < wallpaper.length; i++) {
if (max < wallpaper[i].lastIndexOf("#")) {
max = wallpaper[i].lastIndexOf("#");
}
}
answer1[3] = max + 1;
for (int j = 0; j < answer1.length; j++) {
System.out.println(answer1[j]);
}
}
}
즉 이 문제를 해결하기 위해서, 2중 for문으로 한번에 모든 경우의수를 해결할 수 있다는 것을 알게되었다
추가로 잘 사용하지 않았던, Math 함수를 사용하면 편하게 구할 수 있었다.
class Solution {
public int[] solution(String[] wallpaper) {
int hMin = wallpaper.length;
int hMax = 0;
int wMin = 50; // 최대길이가 50임
int wMax = 0;
// wallpaper 배열안의 각 인덱스안에 있는 문자열 중 #을 찾아서 각 규칙을 찾기
for(int i=0; i<wallpaper.length; i++) {
for(int j=0; j<wallpaper[i].length(); j++) {
if(wallpaper[i].charAt(j) == '#') {
hMin = Math.min(i, hMin);
hMax = Math.max(i, hMax);
wMin = Math.min(j, wMin);
wMax = Math.max(j, wMax);
}
}
}
int answer[] = {hMin,wMin,hMax+1,wMax+1};
return answer;
}
}
result [a,b,c,d]
-> result[0] 의 값은 각 인덱스값에서 #이 포함되어있는 최초의 인덱스번호!
ex) 다른 방법 : 배열.indexOf()
-> result[1] 의 값은 인덱스 값에서 #이 포함되어있는 마지막 인덱스번호!
ex) 다른 방법 : 배열.lastIndexOf()
-> result[2] 의 값은 인덱스 안의 문자열 안에서 #이 포함되어있는 위치 중 가장 앞에있는 번호
-> result[3] 의 값은 인덱스 안의 문자열 안에서 #이 포함되어있는 위치 중 가장 뒤에있는 번호