알고리즘

[알고리즘]프로그래머스 LV.1 - 바탕화면 정리

로돌씨 2024. 7. 2. 16:40

문제

 

풀이

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)