ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฌธ์ œ

 

๋ฌธ์ œํ’€์ด

https://choi95.tistory.com/126

 

[DFS]๋ฏธ๋กœ ํƒ์ƒ‰

๋ฌธ์ œ ๋ฌธ์ œํ’€์ด https://choi95.tistory.com/39 ๋ด‰์šฐ๋ฆฌ ๋ฌธ์ œ  ์ง€๋„ ์ •๋ณด๊ฐ€ N*N ๊ฒฉ์žํŒ์— ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ๊ฒฉ์ž์—๋Š” ๊ทธ ์ง€์—ญ์˜ ๋†’์ด๊ฐ€ ์“ฐ์—ฌ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ฒฉ์žํŒ์˜ ์ˆซ์ž ์ค‘ ์ž์‹ ์˜ ์ƒํ•˜์ขŒ์šฐ ์ˆซ์ž๋ณด๋‹ค ํฐ ์ˆซ์ž  

choi95.tistory.com

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์ด์ „์— ํฌ์ŠคํŒ… ํ–ˆ๋˜ ๋ฏธ๋กœ ํƒ์ƒ‰ ๋ฌธ์ œ์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

  1. ํƒ์ƒ‰ ๋ฐฉํ–ฅ์ด '์ขŒ ์šฐ ์ƒ ํ•˜' ์™ธ์—๋„ ๋Œ€๊ฐ์„ ๊นŒ์ง€ ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค.
  2. ์—ฌ๋Ÿฌ ๊ฐˆ๋ž˜์˜ ๊ธธ์„ ๊ตฌํ•˜๋Š” ๋ฏธ๋กœ ํƒ์ƒ‰์€ ํ•œ๋ฒˆ ํƒ์ƒ‰ํ–ˆ๋˜ ๊ธธ์„ ๊ฐ”๋˜ ์ง€์ ์œผ๋กœ ์ฒดํฌํ•œ ๋’ค์— ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ•  ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด ๋‹ค์‹œ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ๋งˆ์นœ ๋’ค์— ๊ฐ€์ง€ ์•Š์•˜์Œ์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ์ง€๋งŒ ํ•ด๋‹น ๋ฌธ์ œ์—์„œ๋Š” ์ •ํ•ด์ ธ ์žˆ๋Š” ์„ฌ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ ํƒ์ƒ‰ํ•œ ์ง€์ ์€ ๊ทธ๋Œ€๋กœ ๊ฐ”๋˜ ์ง€์ ์œผ๋กœ ๋‘”๋‹ค(๋ฌดํ•œ ๋ฃจํ”„ ๋ฐฉ์ง€)

์ฝ”๋“œ

function solution(board) {
  let answer = 0;
  let n = board.length;
  let dx = [-1, -1, 0, 1, 1, 1, 0, -1]; //์‹œ๊ณ„ ๋ฐฉํ–ฅ ์ˆœ์„œ๋Œ€๋กœ(๋Œ€๊ฐ์„  ์ขŒํ‘œ๊นŒ์ง€ ํฌํ•จ)
  let dy = [0, 1, 1, 1, 0, -1, -1, -1];
  let m = dx.length;

  function DFS(x, y) {
    board[x][y] = 0; //๋ฌดํ•œ ๋ฃจํ”„ ๋ฐฉ์ง€ ๋ฐ ํ•œ๋ฒˆ ์ฐธ์กฐํ•œ ์„ฌ์„ ๋‹ค์‹œ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ฒŒ๋” 0์œผ๋กœ ์ดˆ๊ธฐํ™”
      for(let k = 0; k < m; k++) {
        let nx = x + dx[k];
        let ny = y + dy[k];
        if(nx >= 0 && nx < n && ny >= 0 && ny < n && board[nx][ny] === 1) {
          DFS(nx, ny);
        }
      }
  }

  for(let i = 0; i < n; i++) {
    for(let j = 0; j < n; j++) {
      if(board[i][j] === 1) {
        answer++; 
        DFS(i, j);
      }
    }
  }

  return answer;
}

let arr = [[1, 1, 0, 0, 0, 1, 0],
           [0, 1, 1, 0, 1, 1, 0],
           [0, 1, 0, 0, 0, 0, 0],
           [0, 0, 0, 1, 0, 1, 1],
           [1, 1, 0, 1, 1, 0, 0],
           [1, 0, 0, 0, 1, 0, 0],
           [1, 0, 1, 0, 1, 0, 0]]
console.log(solution(arr));

 

์ฝ”๋“œ_BFS ํ™œ์šฉ

function solution(board) {
  let answer = 0;
  let n = board.length;
  let dx = [-1, -1, 0, 1, 1, 1, 0, -1];
  let dy = [0, 1, 1, 1, 0, -1, -1, -1];
  let m = dx.length;
  let queue = [];

  for(let i = 0; i < n; i++) {
    for(let j = 0; j < n; j++) {
      if(board[i][j] === 1) {
        board[i][j] = 0; //์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ํ์— ์„ฌ์˜ ์ขŒํ‘œ ์ •๋ณด๋ฅผ ํ‘ธ์‰ฌํ•ด์ฃผ๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น ์ขŒํ‘œ๋ฅผ ์ˆœํšŒํ•œ ์ง€์ ์œผ๋กœ ์ฒดํฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค(๋ฌดํ•œ ๋ฃจํ”„ ๋ฐฉ์ง€)
        queue.push([i, j]);
        answer++;
        while(queue.length) {
          let [x, y] = queue.shift();
          for(let k = 0; k < m; k++) {
            let nx = x + dx[k];
            let ny = y + dy[k];
            if(nx >= 0 && nx < n && ny >= 0 && ny < n && board[nx][ny] === 1) {
              board[nx][ny] = 0;
              queue.push([nx, ny]);
            }
          }
        }
      }
    }
  }

  return answer;
}

let arr = [[1, 1, 0, 0, 0, 1, 0],
           [0, 1, 1, 0, 1, 1, 0],
           [0, 1, 0, 0, 0, 0, 0],
           [0, 0, 0, 1, 0, 1, 1],
           [1, 1, 0, 1, 1, 0, 0],
           [1, 0, 0, 0, 1, 0, 0],
           [1, 0, 1, 0, 1, 0, 0]]
console.log(solution(arr));
๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2024/10   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ