💯 CodingTest/Programmers

[Programmers] (Javascript) 거리두기 확인하기

S.Honey 2022. 4. 21. 20:38
function solution(places) {
    var answer = [];
    
    for(const place of places)
    {
        var flag = false;
        for (var i = 0; i <place.length; i++)
        {
            for(var j = 0; j < place[i].length; j++)
            {
                if (place[i][j] == 'P')
                {
                    if (!bfs(place,i,j))
                    {
                        flag = true;
                    }
                }
            }
        }

        if (flag) 
        {
            answer.push(0);
        }
        else{
            answer.push(1);
        }

    }
    
    return answer;
}

var dx = [-1, 1, 0, 0];
var dy = [0, 0, -1, 1];

function bfs(graph, x, y)
{
    var visited = Array.from(Array(5), () => Array(5).fill(false));
    //2 차원 배열 초기화 및 false로 채우기 외워두자
    
    var q = [];
    q.push([x, y, 0])
    visited[x][y] = true;

    while (q.length !== 0)
    {
        var data = q.shift();
        var x = data[0];
        var y = data[1];
        var d = data[2];

        if (d === 2){
            continue;
        }
        else
        {
            for(var i = 0; i<4;i++)
            {
                nx = x + dx[i];
                ny = y + dy[i];

                if (nx>=0 && nx<5 && ny>=0 && nx<5)
                {
                    if (visited[nx][ny] === true)
                    {
                        continue;
                    }

                    if (graph[nx][ny] === 'X')
                    {
                        continue;
                    }
                    else if(graph[nx][ny] === 'P')
                    {
                        return false;
                    }
                    else if(graph[nx][ny] === 'O')
                    {
                        q.push([nx, ny, d+1]);
                        visited[nx][ny] = true;
                    }
                }
            }   
        }
    }
    return true;
}