728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/161990
문제 설명
문제는 길기 때문에 링크를 통해서 보는 것을 추천한다.
요약하자면, 마우스를 움직여서 파일들을 삭제하는데 최소한의 이동거리를 갖는 드래그의 시작점과 끝점을 담은 정수 배열을 return 하는 문제이다.
해설
처음 접근 방법을 내가 실제로 파일을 최소한의 마우스 움직임으로 삭제를 할 때 어떻게 하나 생각을 해보았다.
그랬더니 가장 위에 있는 파일, 가장 왼쪽에 있는 파일, 가장 오른쪽에 있는 파일, 가장 아래에 있는 파일을 찾고 그거에 맞게 마우스를 움직일 것 같다고 판단했기 때문에, 바탕화면 배열 wallpaper를 완전탐색하면서 가장 위, 왼쪽, 오른쪽, 아래를 지정하면 된다.
이때 세 가지 정도 중요한점이 있다.
1. [위, 왼쪽, 오른쪽, 아래]를 지정하면 된다.
2. 위와 왼쪽은 최소값을 구해야 하고 오른쪽과 아래는 최댓값을 구해야 한다.
3. 0,0 에 파일이 존재한다면 위, 왼쪽은 [0, 0]이고 오른쪽, 아래 1씩 더한 값 [1, 1]이다.
코드 1
class Solution {
public int[] solution(String[] wallpaper) {
int top = Integer.MAX_VALUE;
int left = Integer.MAX_VALUE;
int bottom = Integer.MIN_VALUE;
int right = 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) == '#') {
top = Math.min(i, top);
left = Math.min(j, left);
bottom = Math.max(i + 1, bottom);
right = Math.max(j + 1, right);
}
}
}
return new int[]{top, left, bottom, right};
}
}
코드 2
class Solution {
public int[] solution(String[] wallpaper) {
int[] answer = new int[]{
Integer.MAX_VALUE,
Integer.MAX_VALUE,
Integer.MIN_VALUE,
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) == '#') {
answer[0] = Math.min(i, answer[0]);
answer[1] = Math.min(j, answer[1]);
answer[2] = Math.max(i + 1, answer[2]);
answer[3] = Math.max(j + 1, answer[3]);
}
}
}
return answer;
}
}
728x90
'알고리즘 > 구현' 카테고리의 다른 글
[프로그래머스] 혼자서 하는 틱택토 Lv2 JAVA [구현][엄탱] (1) | 2023.07.13 |
---|---|
[프로그래머스] lv1 공원 산책 java [구현][엄탱] (6) | 2023.07.04 |