Programmers Algorithm - 바탕화면 정리

Myung Jin Kim·2023년 9월 10일
0

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 를 계산해서 답을 구해내는 방식이 연산 횟수를 줄이기에 좀 더 나은 코드로 보인다.

profile
개발을 취미로 하고 싶은 개발자를 목표로 살고 있습니다

0개의 댓글