[BaekJoon] 11724๋ฒˆ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

2022. 6. 3. 14:35ยท๐Ÿ’ฏ CodingTest/BaekJoon

โ–ถ ๋ฌธ์ œ : https://www.acmicpc.net/problem/11724

 

11724๋ฒˆ: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N๊ณผ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฐ„์„ ์˜ ์–‘ ๋์  u์™€ v๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ u, v ≤ N, u ≠ v) ๊ฐ™์€ ๊ฐ„์„ ์€ ํ•œ ๋ฒˆ๋งŒ ์ฃผ

www.acmicpc.net

 

โ–ถ ์ฝ”๋“œ :

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

let N = 0; 
let E = 0;
const edges = [];

rl.on('line', function(line) {
    if(!N){
        [N, E] = line.split(' ').map(Number);
        if(E === 0){
           main();
           process.exit(); 
        }
    }else{
        edges.push(line);
        if(edges.length === E){
            main();
            process.exit();
        }
    }  
});

const main = () => {
    const graph = Array.from(Array(N), () => Array().fill([]));

    for (let i = 0; i < E; i++){
        const [x,y] = edges[i].split(' ').map(n => Number(n));
        graph[x-1].push(y-1);
        graph[y-1].push(x-1);    
    }

    const visited = Array(N).fill(false);

    let count = 0;
    for(let i = 0; i < N; i++){
        if(visited[i]){
            continue;
        }else{
            dfs(graph,visited,i);
            count+=1;        
        }
    }

    console.log(count);

    function dfs(graph, visited, start){
        visited[start] = true;
        const stack = [...graph[start]]

        while(stack.length > 0){
            const node = stack.pop();
            if(visited[node]){
                continue;
            }

            visited[node] = true;
            stack.push(...graph[node]);
        }
    }
}

 

โ–ถ ๋ฌธ์ œ ํ’€์ด :

1. ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ์–ด๋ ต๊ฒŒ ํ’€์—ˆ๋‹ค. ์ดˆ๊ธฐ fs ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•(...)์„ ๋‚œ์‚ฌํ•˜๋ฉด์„œ ํ’€์—ˆ๋˜ ์ฝ”๋“œ์—์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ–ˆ๋‹ค. 

2. ์Šคํ”„๋ ˆ๋“œ(...) ๋ฌธ๋ฒ•์€ ๊ธฐ์กด ๋ฐฐ์—ด์„ ์ชผ๊ฐœ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ์— ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๋‚˜(?) ๋ผ๋Š” ์˜์‹ฌ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•œ ๋ถ€๋ถ„์„ ์ค„์—ฌ๋ณด์ž ํ•ด์„œ ๋‹ค์‹œ๊ธˆ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋˜ํ•œ ์ž…์ถœ๋ ฅ ๋ฐฉ์‹์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•ด์„œ fs์—์„œ readline์„ ์ด์šฉํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•ด๋ณด์•˜๋‹ค.

3. ์ดˆ๊ธฐ readline์„ ํ†ตํ•ด ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑํ•ด N, E, edges[] ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  main ๋ฉ”์„œ๋“œ์—์„œ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

4. main๋ฌธ์—์„œ๋Š” edge๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‚ด๋ถ€ ์ •์˜ํ•จ์ˆ˜ dfs()๋ฅผ ์ด์šฉํ•ด ๊ทธ๋ž˜ํ”„๋“ค์„ ํƒ์ƒ‰ํ•œ๋‹ค. ๊ฒฐ๊ตญ dfs์— ์˜ํ•ด visited๋ฐฐ์—ด์— ํ•œ๋ฒˆ์”ฉ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๊ณ  dfs๋ฅผ ํ˜ธ์ถœํ• ๋•Œ๋งˆ๋‹ค count๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์˜€๋‹ค. 

5. ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ ธ์ง€๋งŒ ๊ทธ๋ž˜๋„ ํ•ด๊ฒฐํ–ˆ์Œ์— ๋ฟŒ๋“ฏํ•˜๊ณ  ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค๊ฐ€ ์กฐ๊ธˆ ๋” ๊น”๋”ํ•˜๊ณ , ์ดํ•ด๊ฐ€ ์ž˜๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์—ˆ๊ธฐ์— ๊ฐ€์ ธ์™€ ๋ณด์•˜๋‹ค.

 

โ–ถ ๋‹ค๋ฅธ ์œ ์ €์˜ ํ’€์ด๋ฐฉ๋ฒ•:

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [n, m] = input.shift().split(' ').map(Number);
const arr = input.map((el) => el.split(' ').map(Number));

const solution = (n, arr) => {
  let answer = 0;
  let visited = Array.from(Array(n + 1), () => 0);
  const graph = Array.from(Array(n + 1), () => []);
  for (let [a, b] of arr) {
    graph[a].push(b);
    graph[b].push(a);
  }
  const dfs = (node) => {
    visited[node] = 1;
    for (let next of graph[node]) {
      if (!visited[next]) {
        dfs(next);
      }
    }
  };

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

  return answer;
};

console.log(solution(n, arr));

[์ถœ์ฒ˜] https://www.acmicpc.net/source/43991075

'๐Ÿ’ฏ CodingTest > BaekJoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BaekJoon] 17626๋ฒˆ Four Squares  (0) 2022.06.03
[BaekJoon] 17219๋ฒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ  (0) 2022.06.03
[BaekJoon] 2606๋ฒˆ ๋ฐ”์ด๋Ÿฌ์Šค  (0) 2022.06.02
[BaekJoon] 2579๋ฒˆ ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ  (0) 2022.06.02
[Baekjoon] 1764 ๋“ฃ๋ณด์žก  (0) 2022.05.27
'๐Ÿ’ฏ CodingTest/BaekJoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BaekJoon] 17626๋ฒˆ Four Squares
  • [BaekJoon] 17219๋ฒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ
  • [BaekJoon] 2606๋ฒˆ ๋ฐ”์ด๋Ÿฌ์Šค
  • [BaekJoon] 2579๋ฒˆ ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ
S.Honey
S.Honey
  • S.Honey
    Algo ์“ฐ์ž
    S.Honey
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (123)
      • ํšŒ๊ณ  (0)
        • ์ทจ์—… ํ›„ ํšŒ๊ณ  (0)
      • ๐Ÿƒ Frontend Road-Map (2)
        • ๐Ÿšฉ Summary (1)
        • ๐Ÿ“š Road-Map Contents (1)
        • ๐ŸŸง HTML (0)
        • ๐ŸŸฆ CSS (0)
        • ๐ŸŸจ Javascript (0)
        • โฌœ React (0)
        • ๐ŸŸช Redux (0)
      • Backend (0)
        • QueryDSL (0)
      • ๐Ÿ’ป Programming Language (54)
        • C# (51)
        • Flutter-Dart (3)
        • Java (0)
      • ๐Ÿ“š Computer Science (4)
        • Algorithms (4)
        • Database (0)
        • Network (0)
        • Operating System(OS) (0)
      • ๐Ÿ’ฏ CodingTest (60)
        • BaekJoon (22)
        • Programmers (34)
        • CodeTree (4)
      • โœ’๏ธ Design Pattern (1)
      • ๐Ÿฑ Etc (2)
        • Jenkins Plugin ์ œ์ž‘๊ธฐ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

    • ๊ณต์ง€์‚ฌํ•ญ

      • ๐Ÿ“– ๊ณต๋ถ€ ์ฐธ๊ณ  ๊ต์žฌ ๋ฐ ์ž๋ฃŒ
    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

      ์Šคํ„ฐ๋””
      ์นด์นด์˜ค
      ํŒŒ์ด์ฌ
      DART
      sort
      Flutter
      ๋ฌธ์ž์—ด ํŒŒ์‹ฑ
      Java
      Algorithm
      c#
      JS
      ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
      ์ž๋ฃŒ๊ตฌ์กฐ
      ์ฝ”๋“œํŠธ๋ฆฌ
      ์“ฐ์…จ์ž–์•„
      ์•Œ๊ณ ๋ฆฌ์ฆ˜
      ์‚ผ์„ฑsw์—ญํ…Œ
      DP
      JavaScript
      ๋ฐฑ์ค€
      ๊ตฌํ˜„
      ์ด์ง„ํƒ์ƒ‰
      ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
      ์‹œ๋ฎฌ๋ ˆ์ด์…˜
      ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰
      BFS
      ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      programmers
      BAEKJOON
    • ์ตœ๊ทผ ๋Œ“๊ธ€

    • ์ตœ๊ทผ ๊ธ€

    • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
    S.Honey
    [BaekJoon] 11724๋ฒˆ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜
    ์ƒ๋‹จ์œผ๋กœ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”