[프로그래머스] Lv2. [PCCP 기출문제] 2번 - JavaScript

이상돈·2023년 12월 8일
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 2

출처 : 프로그래머스 - [PCCP 기출문제] 2번

문제

제한사항

📌 내가 생각한 풀이

1. BFS를 이용하여 기름이 묻힌곳의 총량을 구하자
2.sum을 구할때 지나간곳의 가로 인덱스를 따로 저장해주자(나중에 해당 가로인덱스에 sum을 더해줄 것이기 때문)
3. 저장된 가로인덱스 배열에 총량을 더해주자
function solution(land) {
    var answer = 0;
    let dx = [-1,1,0,0];
    let dy = [0,0,-1,1];
    let n = land.length;
    let m = land[0].length;
    let arr = new Array(m).fill(0);
    let visited = Array.from(Array(n),()=>Array(m).fill(false));
    for(var i =0; i<n; i++){
        for(var k =0; k<m; k++){
            if(land[i][k] === 0){continue;}
            else{
                if(!visited[i][k]){
                    let queue = [[i,k]];
                    let sum = 0;
                    // 해당하는 가로 인덱스를 담을 배열
                    let garo = new Array(m).fill(false);
                    while(queue.length){
                        let [x,y] = queue.pop();
                        if(!visited[x][y]){
                            sum+=1;
                            visited[x][y] = true;
                            garo[y] =true;
                        for(var j =0; j<4; j++){
                            let lx = x + dx[j];
                            let ly = y + dy[j];
                            if(lx >=0 && ly >=0 && lx <n && ly<m && land[lx][ly] === 1 && !visited[lx][ly]){
                                
                                queue.push([lx,ly]);
                            }
                        }
                        }
                    }
                    garo.forEach((d,i)=>{
                        if(d === true) arr[i] += sum;
                    })
                }
            }
        }
    }
    return Math.max(...arr)
}

📌 느낀점

가로인덱스를 따로 설정해주고, 그 인덱스에 sum을 누적합해주는 것이 핵심이였다. 비교적 쉽게 푼 문제이다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글