구현
문제를 처음 딱 보면 굉장히 길고 복잡해보이지만, 해석을 하면 굉장히 간단한 문제입니다.
모든 #을 포함하는 가장 작은 사각형의 왼쪽 상단, 오른쪽 하단 모서리의 좌표 구하기
이것이 핵심입니다.
각 #
의 좌표를 탐색하여 아래의 값을 구합니다.
가장 작은 row 값 -> top
가장 큰 row 값 -> bottom
가장 작은 column 값 -> left
가장 큰 column 값 -> right
[top, left, bottom, right]
형식을 반환합니다.
다만, bottom과 right는 반환할 때, 각각 1씩 더해줘야 합니다.
왜냐하면 문제에서 #을 볼 때, #의 좌상단을 0,0 우하단을 1,1로 보았기 때문입니다.
function solution(wallpaper) {
let [top, bottom, left, right] = [51, 0, 51, 0];
for (let r = 0; r < wallpaper.length; r++) {
for (let c = 0; c < wallpaper[0].length; c++) {
if (wallpaper[r][c] === ".") continue;
top = Math.min(top, r);
bottom = Math.max(bottom, r);
left = Math.min(left, c);
right = Math.max(right, c);
}
}
return [top, left, bottom + 1, right + 1];
}