< 내 풀이 >
class Solution {
public int[] solution(String[] wallpaper) {
char arr[][]=new char[wallpaper.length][wallpaper[0].length()];
for(int i=0;i<arr.length;i++){
String s=wallpaper[i];
for(int j=0;j<arr[i].length;j++){
arr[i][j]=s.charAt(j); //2차원 배열에 값 넣기
}
}
int start_min=Integer.MAX_VALUE;
int start_max=0;
int end_min=Integer.MAX_VALUE;
int end_max=0;
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
if(arr[i][j]=='#'){
start_min=Math.min(start_min,i);
start_max=Math.max(start_max,i);
end_min=Math.min(end_min,j);
end_max=Math.max(end_max,j);
}
}
}
int[] answer = {start_min,end_min,start_max+1,end_max+1};
return answer;
}
}
✏️ 풀이 과정
1. 2차원 배열에 wallpaper의 값을 저장한다.
2. 2차원 배열을 돌면서 값이 # 일 때 ( 파일이 있을 때 ) , 행의 값 중 가장 작은 값과 큰 값, 열의 값 중 가장 작은 값과 큰 값을 각각의 변수의 저장한다.
3. answer에 { 행 값 중 가장 작은 값, 열 값 중 가장 작은 값, 행 값 중 가장 큰 값+1, 열 값 중 가장 큰 값 +1 } 을 저장하여 return 한다.
< 다른 사람의 풀이 >
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};
}
}
➡️ 나는 2차원 배열에 저장을 했지만, 굳이 하지 않아도 된다!!
✍🏻 느낀점
저번에 백준에서 뭔가 비슷한 문제를 풀었어서, 빨리 푼 것 같다. 하지만 실수했던 부분은 start_min 과 end_min의 값을 처음에 0으로 두고 시작해서 계산이 이상하게 되어버렸다. 0보다 작은 값은 없는데..! min을 구하려고 할 때 종종 이런 실수를 하게 되는 것 같은데, 이를 잊지 말고 담에는 실수하지 말자 !
'코딩테스트 > Programmers' 카테고리의 다른 글
[JAVA] 크레인 인형 뽑기 게임 (0) | 2024.06.01 |
---|---|
[JAVA] 성격 유형 검사하기 (0) | 2024.06.01 |
[JAVA] 개인정보 수집 유효기간 (0) | 2024.05.27 |
[JAVA] 신고 결과 받기 (0) | 2024.05.23 |
[JAVA] 공원 산책 (0) | 2024.05.23 |