n*m 크기의 배열에 파일이 하나 이상 존재한다. 이러한 파일들을 모두 최소한의 거리로 드래그를 하기 위한 좌표를 구하는 문제다.
내가 찾아야 하는 파일의 최소좌표와 최대좌표만 구하면 된다.
function solution(wallpaper) {
const MAX_WALLPAPER_LENGTH = 50;
const MIN_WALLPAPER_LENGTH = 0;
const dargOffsetXY = {
lux: MAX_WALLPAPER_LENGTH,
luy: MAX_WALLPAPER_LENGTH,
rux: MIN_WALLPAPER_LENGTH,
ruy: MIN_WALLPAPER_LENGTH
};
wallpaper.forEach((eachWallpaper, x) => {
eachWallpaper.split('').forEach((eachWallpaperValue, y) => {
if(eachWallpaperValue === '#') {
dargOffsetXY.lux = Math.min(dargOffsetXY.lux, x);
dargOffsetXY.luy = Math.min(dargOffsetXY.luy, y);
dargOffsetXY.rux = Math.max(dargOffsetXY.rux, x + 1);
dargOffsetXY.ruy = Math.max(dargOffsetXY.ruy, y + 1);
}
});
});
return [dargOffsetXY.lux, dargOffsetXY.luy, dargOffsetXY.rux, dargOffsetXY.ruy];
}
파일은 무조건 하나 이상이 있다는 전제이기에 드래그 최대최소로 초기화를 해두고 파일을 찾는 로직을 넣었다.
다른 사람들이 푼 풀이방식을 봤을 때, 대체로 모두 파일들의 좌표를 가지고 MIN, MAX 를 통해 드래그의 시작점과 끝점을 구했는데 그 중 괜찮아보이는 로직은 다음과 같다.
나는 파일이 있는 경우 매번 MIN, MAX 를 계산했지만 각 파일의 드래그 좌표를 모두 배열에 담은 후 마지막에 한 번에 MIN, MAX 를 계산해서 답을 구해내는 방식이 연산 횟수를 줄이기에 좀 더 나은 코드로 보인다.