🔍문제
📊분석
- 파일(#) 이 위치한 가장 작은 y, x 값을 구한다.
- 파일(#) 이 위치한 가장 큰 y, x의 값을 구한 뒤 1 을더해준다 (y+1, x+1) 드래그를 하면 파일보다 많이 커서를 위치해야 되기 때문.
- 이 값들을 (minx, miny, maxX, maxY) 값으로 나열한 뒤 보내준다.
✏️ 풀이
import java.util.*;
class Solution {
public int[] solution(String[] wallpaper) {
int maxY = 0;
int maxX = 0;
int minX = wallpaper[0].length();
int minY = wallpaper.length;
for(int i = 0; i< wallpaper.length; i++){
String tmp = wallpaper[i];
for(int j = 0; j< tmp.length();j++){
char x = tmp.charAt(j);
if (x == '#'){
if(i < minY){
minY = i;
}
if(i > maxY){
maxY = i;
}
if(j < minX){
minX = j;
}
if(j > maxX){
maxX =j;
}
}
}
}
int[] answer = {minY, minX, maxY+1, maxX+1};
return answer;
}
}
- maxY, maxX의 값은 0으로 세팅해 준다.
- minX, minY의 값은 가질 수 있는 가장 큰 값인 wallpaper의 길이 그리고 리스트 내부 스트링에 길이로 세팅해 준다.
- #이 나올 경우 minX, minY, maxX, maxY의 값을 업데이트해 준다.
🤔 다른 사람 풀이
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};
}
}
min max value로 세팅하는 것과 math.min을 쓰는 것이 훨씬 더 간결해 보인다. 하지만 메모리상 if문과 Math패키지중 뭐가 더 효율적인지 알아보고 싶다. 나중에는 한번 비슷한 유형의 문제가 나오면 도전해 봐야겠다.
'알고리즘 문제 연습' 카테고리의 다른 글
[프로그래머스]N개의 최소 공배수 (0) | 2024.10.13 |
---|---|
[프로그래머스] JadenCase 문자열 (5) | 2024.10.07 |
[프로그래머스] 성격 유형 검사하기 (0) | 2024.09.30 |
[프로그래머스] 숫자 짝꿍 (0) | 2024.09.20 |
[프로그래머스] 옹알이(2) (0) | 2024.09.03 |