Algorithm

프로그래머스 - 바탕화면 정리

b._.omi 2023. 5. 26. 11:00

 

문제

 

풀이

이 문제는 드래그를 시작할 좌표와 드래그를 마칠 좌표를 구하는게 관건이다

wallpaper 배열의 요소들 중에서 '#' 문자가 나온 가장 첫번째 요소의 인덱스가 드래그를 시작할 좌표의 y좌표가 된다

wallpaper 배열의 요소에서 가장 첫번째로 존재하는 '#' 문자가 몇 번째 인덱스에 있는지 확인하고 그중 최솟값이 드래그를 시작할 좌표의 x좌표가 된다

wallpaper 배열의 요소들 중에서 '#' 문자가 나온 요소들 중 마지막 요소의 인덱스 + 1 이 드래그를 마칠 좌표의 y좌표가 된다

wallpaper 배열의 요소에서 마지막에 존재하는 '#' 문자가 몇 번째 인덱스에 있는지 확인하고 그중 최댓값 + 1 이 드래그를 마칠 좌표의 x좌표가 된다

function solution(wallpaper) {
    // [최상단y, 최상단x, 최하단y, 최하단x]
    let position = [0, 0, 0, 0];
    let initArr = [];
    
    // 최상단 y좌표 구하기
    for(let i = 0; i < wallpaper.length; i++) {
        if(wallpaper[i].includes('#')) {
            position[0] = i;
            break;
        }
    }
    
    // 최상단 x좌표 구하기
    for(let i = 0; i < wallpaper.length; i++) {
        if(wallpaper[i].includes('#')) {
            initArr.push(wallpaper[i].indexOf('#'));
        }
        position[1] = Math.min(...initArr);
    }
    initArr = [];
    
    // 최하단 y좌표 구하기
    for(let i = 0; i < wallpaper.length; i++) {
        if(wallpaper[i].includes('#')) {
            initArr.push(i+1);
        }
        position[2] = Math.max(...initArr);
    }
    initArr = [];
    
    // 최하단 x좌표 구하기
    for(let i = 0; i < wallpaper.length; i++) {
        if(wallpaper[i].includes('#')) {
            initArr.push(wallpaper[i].lastIndexOf('#')+1);
        }
        position[3] = Math.max(...initArr);
    }
    
    return position;
}