๐Ÿ’ป์šฉ๋‡ฝ ๊ฐœ๋ฐœ ๋…ธํŠธ๐Ÿ’ป
article thumbnail
๋ฐ˜์‘ํ˜•

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ ํ’€์ด

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ

DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค '๋„คํŠธ์›Œํฌ' ๋ฌธ์ œ ํ’€์ด๋ฅผ ํ•ด๋ณด๊ฒ ๋‹ค.

โ“ ๋ฌธ์ œ 

๋ฌธ์ œ ์„ค๋ช…

๋„คํŠธ์›Œํฌ๋ž€ ์ปดํ“จํ„ฐ ์ƒํ˜ธ ๊ฐ„์— ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปดํ“จํ„ฐ A์™€ ์ปดํ“จํ„ฐ B๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๊ณ , ์ปดํ“จํ„ฐ B์™€ ์ปดํ“จํ„ฐ C๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ ์ปดํ“จํ„ฐ A์™€ ์ปดํ“จํ„ฐ C๋„ ๊ฐ„์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํ“จํ„ฐ A, B, C๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์ƒ์— ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ปดํ“จํ„ฐ์˜ ๊ฐœ์ˆ˜ n, ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด computers๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋„คํŠธ์›Œํฌ์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ œํ•œ ์‚ฌํ•ญ

  • ์ปดํ“จํ„ฐ์˜ ๊ฐœ์ˆ˜ n์€ 1 ์ด์ƒ 200 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๊ฐ ์ปดํ“จํ„ฐ๋Š” 0๋ถ€ํ„ฐ n-1์ธ ์ •์ˆ˜๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • i๋ฒˆ ์ปดํ“จํ„ฐ์™€ j๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด computers[i][j]๋ฅผ 1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • computer[i][i]๋Š” ํ•ญ์ƒ 1์ž…๋‹ˆ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ตœ๋Œ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํšŒ์˜์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

n computers retrun
3 [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 2
3 [[1, 1, 0], [1, 1, 1], [0, 1, 1]] 1

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์˜ˆ์ œ #1
์•„๋ž˜์™€ ๊ฐ™์ด 2๊ฐœ์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #1

์˜ˆ์ œ #2
์•„๋ž˜์™€ ๊ฐ™์ด 1๊ฐœ์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #2

 

๐Ÿ’ก ํ’€์ด

DFS๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

์ž…๋ ฅ์œผ๋กœ 2์ฐจ์› ๋ฐฐ์—ด์„ ๋ฐ›๊ฒŒ ๋˜๋Š”๋ฐ, ๋ฐ›์€ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ๋ฐฉ๋ฌธ์„ ํ–ˆ๋Š”์ง€ ์•ˆ ํ–ˆ๋Š”์ง€ ์ฒดํฌ๋ฅผ ์•ˆํ•˜๊ฒŒ ๋˜๋ฉด ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ง€๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ์ฒดํฌ๊ฐ€ ์ •๋ง ์ค‘์š”ํ•˜๋‹ค. 

๊ทธ๋ž˜์„œ ๋จผ์ € ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด์„ Array ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•ด ๊ธธ์ด๋Š” ์ž…๋ ฅ๋ฐ›์€ ๊ธธ์ด์™€ ๋™์ผํ•˜๊ณ  ์ดˆ๊ธฐ ๊ฐ’์€ ๊ฐ๊ฐ false๋กœ ์ฃผ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ•ด๋‹น ์ธ๋ฑ์Šค(์ปดํ“จํ„ฐ)์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ณธ๊ฒฉ์ ์œผ๋กœ ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ๋„˜๊ฒจ์ฃผ๋ฉด์„œ dfsํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค.

dfsํ•จ์ˆ˜ ์•ˆ์—์„œ๋Š” ์ฒซ ๋ฒˆ์งธ๋กœ ๋ฐฉ๋ฌธ์„ ํ–ˆ์œผ๋‹ˆ ํ•ด๋‹น ์ธ๋ฑ์Šค์— true ๊ฐ’์„ ์ฃผ์–ด์„œ ๋ฐฉ๋ฌธ์„ ํ–ˆ๋‹ค๊ณ  ์ฒดํฌ๋ฅผ ํ•˜๊ณ ,

๋‹ค์‹œ ๊ทธ ์•ˆ์—์„œ for๋ฌธ์„ ๋Œ๊ฒŒ ๋˜๋Š”๋ฐ ํ•ด๋‹น ์ปดํ“จํ„ฐ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ (value === 1) ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋”๋ผ๋ฉด 

๋‹ค์‹œ ์žฌ๊ท€๋กœ ๋ป—์–ด ๋‚˜๊ฐ€๋ฉด์„œ ๋ฐฉ๋ฌธํ–ˆ๋˜ ์ธ๋ฑ์Šค(์ปดํ“จํ„ฐ)์— true ๊ฐ’์„ ์ฃผ์–ด ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ํ•ด์ค€๋‹ค.

์ด์ œ dfsํ•จ์ˆ˜๊ฐ€ ๋์ด ๋‚˜๋ฉด ์ดˆ๊ธฐ ํ˜ธ์ถœ๋˜์—ˆ๋˜ dfsํ•จ์ˆ˜๋กœ ๋Œ์•„๊ฐ€์„œ answer์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œ์ผœ์คŒ์œผ๋กœ์จ ๋„คํŠธ์›Œํฌ ๊ฐœ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ ์ค€๋‹ค.

์ด ์ฝ”๋“œ์˜ ํ•ต์‹ฌ์€ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๋ฉฐ if๋ฌธ์„ ํ†ตํ•ด ํ•ด๋‹น ์ปดํ“จํ„ฐ์™€ ์—ฐ๊ฒฐ ๋˜์–ด์žˆ๋Š”์ง€, ๋ฐฉ๋ฌธ์„ ํ–ˆ์—ˆ๋Š”์ง€๋ฅผ ์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ๋ป—์–ด๋‚˜๊ฐ€๋ฉด์„œ ํ™•์ธํ•˜๊ณ  answer์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œ์ผœ ๋‹ต์„ ๋ฆฌํ„ดํ–ˆ๋‹ค.

 

ํ’€์ด ์ฝ”๋“œ

function solution(n, computers) {
  let answer = 0;
  const length = computers.length;
  const visited = Array.from({ length: n }, () => false);

  function dfs(index) {
    visited[index] = true;

    for (let i = 0; i < length; i++) {
      if (computers[index][i] && !visited[i]) {
        dfs(i);
      }
    }
  }

  for (let i = 0; i < length; i++) {
    if (!visited[i]) {
      dfs(i);
      answer++;
    }
  }

  return answer;
}

โœ” ์ฑ„์ 

์ฑ„์  ๊ฒฐ๊ณผ

 

๐Ÿง ํ›„๊ธฐ

๋ง‰์ƒ ํ’€์—ˆ์„ ๋•Œ๋Š” ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์—ˆ๋‹ค. ์•„์ง DFS๋ฌธ์ œ์ธ์ง€ ์•„๋‹Œ์ง€ ์–ด๋–ค ์‹์œผ๋กœ ํ•ด๊ฒฐํ•ด ๋‚˜์•„๊ฐ€์•ผ ํ•˜๋Š”์ง€ ๋งŽ์ด ๋ถ€์กฑํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•  ๋•Œ๋„ ์–ด๋ ค์›€์ด ์žˆ์–ด์„œ ๊พธ์ค€ํžˆ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ฉด์„œ DFS/BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์— ๋Šฅ์ˆ™ํ•ด์ ธ์•ผ๊ฒ ๋‹ค.

๋ฐ˜์‘ํ˜•
profile

๐Ÿ’ป์šฉ๋‡ฝ ๊ฐœ๋ฐœ ๋…ธํŠธ๐Ÿ’ป

@์šฉ๋‡ฝ

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!