본문 바로가기
BEB/algorithm

27 gossipprotocol

by ddanss 2022. 12. 1.
728x90
const createMatrix = (village) => {
  const matrix = [];
  village.forEach((line) => {
    const row = [];
    for (let i = 0; i < line.length; i++) row.push(line[i]);
    matrix.push(row);
  });
  return matrix;
};
//이 위에 함수는 따로따로 되어 있는 
"0101" 이런 문자열을 '0', '1', '0', '1' 이렇게 바꿔줌

const gossipProtocol = function (village, row, col) {
  let mat = createMatrix(village); //배열을 바꾸고
  let vis = Array.from(Array(village.length), () => Array(village[0].length).fill(0));//방문했는지에 대한 배열
  let queue = [];//큐
  let cur_x, cur_y,x,y;
  let dx = [1,0,-1,0]; //상하좌우
  let dy = [0,1,0,-1]; //상하좌우
  queue.push(row); //큐에 x 넣고
  queue.push(col); //큐에 y 넣고
  vis[row][col] = 1; //해당 자리를 방문했다고 넣어주고
  while(queue.length>=1) { //큐가 비어있을 때 까지 돈다
    x = queue.shift();
    y = queue.shift();
    for(let i=0;i<4;i++) {
      cur_x = x + dx[i];
      cur_y = y + dy[i];
      if(cur_x<0 || cur_x>=village.length || cur_y<0 || cur_y>=village[0].length) continue;
      if(village[cur_x][cur_y] === '0' || vis[cur_x][cur_y]>=1) continue;
      vis[cur_x][cur_y] = vis[x][y]+1;
      queue.push(cur_x);
      queue.push(cur_y);
    }
  }
  return Math.max(...vis.flat())-1;
};
반응형

'BEB > algorithm' 카테고리의 다른 글

백준6549 javascript 히스토그램, 32_largestRectangularArea  (0) 2022.12.08
29 binary heap 최대힙  (1) 2022.12.05
[자바스크립트] 부분 문자열의 합 26_LSCS  (0) 2022.11.30
25_robotPath  (0) 2022.11.29
[Javascript] 기수정렬  (0) 2022.11.28

댓글