๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[Javascript/PGS] Lv.2 : ์„์œ  ์‹œ์ถ” (PCCP ๊ธฐ์ถœ๋ฌธ์ œ 2๋ฒˆ)

728x90
๋ฐ˜์‘ํ˜•

 

https://school.programmers.co.kr/learn/courses/30/lessons/250136

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ ˆ๋ฒจ 2.

BFS ์‘์šฉ ๋ฌธ์ œ์ด๋‹ค

๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰์œผ๋กœ ์„์œ ์นธ ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๊ณ , ์–ด๋–ค ์—ด์—์„œ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋Š”๊ฑด์ง€ Map์— ๋ˆ„์ ํ•œ๋‹ค!

์ฝ”๋“œ๊ฐ€ ๊ธธ๊ธด ํ–ˆ์ง€๋งŒ ํฌ๊ฒŒ ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐ๐Ÿค“

 

 

๋‚˜์˜ ํ’€์ด

let Land;
let n; let m;
let visited;
let dx = [0,1,0,-1];
let dy = [-1,0,1,0];
let columnMap = new Map();

const saveColumns=(columns, count)=>{
    for(let i=0; i<columns.length; ++i){
        if(columns[i]){
            columnMap.set(i,columnMap.has(i)? columnMap.get(i)+count:count);
        }
    }
}

const canVisit=(x,y)=>{
    if(x<0 || y<0 || x>=n || y>=m) return false;
    if(Land[x][y]==0) return false;
    if(visited[x][y]) return false;
    return true;
}

const bfs=(x,y)=>{
    let columns = new Array(m).fill(false);
    let q = [];
    let count = 1;
    q.push([x,y]);
    visited[x][y] = true;
    while(q.length){
        let [a,b] = q.shift();
        columns[b] = true; // ์„์œ ๋ฅผ ํŒŒ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์—ด์„ ์ฒดํฌ
        for(let i=0; i<4; ++i){
            let nx = a + dx[i];
            let ny = b + dy[i];
            if(canVisit(nx,ny)){
                q.push([nx,ny]);
                visited[nx][ny] = true;
                count++;
            }
        }
    }
    saveColumns(columns, count);
}

function solution(land) {
    var answer = 0;
    Land = land;
    n = land.length;
    m = land[0].length;
    visited = Array.from({length:n}, ()=> new Array(m).fill(false));

    for(let i=0; i<n; ++i){
        for(let j=0; j<m; ++j){
            if(!visited[i][j] && land[i][j]==1) {
                bfs(i, j);
            }
        }
    }
    
    columnMap.forEach((value)=>{
        if(answer<value) {
            answer = value;
        }
    })
    return answer;
}

728x90
๋ฐ˜์‘ํ˜•