문제
풀이
function solution(wallpaper) {
var answer = [];
var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
for (let i = 0; i < wallpaper.length; i++) {
let x = wallpaper[i];
//처음 #이 나오는곳의 Index를 구해준다.
let firstIndex = x.indexOf("#");
//마지막으로 #이 나오는곳의 index를 구해준다.
let lastIndex = x.lastIndexOf("#");
//만약 첫줄에 파일이 있다면
if (firstIndex !== -1)
// minX = i번째 줄과 minX중 더 작은 값
minX = Math.min(minX, i);
// maxX = i번째 줄과 maxX중 더 큰 값
maxX = Math.max(maxX, i);
// firstIndex와 minY중 더 작은값
minY = Math.min(minY, firstIndex);
// lastIndex와 maxY중 더 큰 값
maxY = Math.max(maxY, lastIndex);
}
}
// Return empty answer if no '#' found
if (minX === Infinity) {
return answer;
}
// Add 1 to maxY for the end point (exclusive)
answer.push(minX, minY, maxX + 1, maxY + 1);
return answer;
}
먼저 가장 #이나오는 가장 윗쪽 행을 추적함.
- minX = Math.min(minX, i);: 현재 행 i와 기존의 minX 중 더 작은 값을 minX로 업데이트합니다. 이는 #이 처음 등장하는 가장 윗쪽 행을 추적합니다.
그리고 #이나오는 가장 왼쪽행을 추적함
- minY = Math.min(minY, firstIndex);: 현재 행의 firstIndex와 기존의 minY 중 더 작은 값을 minY로 업데이트합니다. 이는 #이 등장하는 가장 왼쪽 열을 추적합니다.
똑같은 방법으로 maxX 와 maxY를 추적하고 예외처리로 파일이 없을경우에는 빈배열을 리턴
파일이있다면 각 점의 위치를 리턴 (최댓값의 위치는 끝까지 드래그 해야하므로 +1)
'알고리즘' 카테고리의 다른 글
[알고리즘]프로그래머스 LV.1 - 크레인 인형뽑기(JS) (0) | 2024.06.25 |
---|---|
[알고리즘]프로그래머스 LV.1 - 숫자짝꿍(JS) (0) | 2024.06.21 |
[알고리즘]프로그래머스 LV.1 - 체육복(JS) (0) | 2024.06.21 |
[알고리즘]프로그래머스LV.1 - 대충 만든 자판(JS) (0) | 2024.06.19 |
[알고리즘] 프로그래머스 LV.1 - 모의고사(JS) (1) | 2024.06.13 |