๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/goorm

[๊ตฌ๋ฆ„LEVEL] ๋ฐฑ์‹ 

by dar0m! 2020. 3. 23.
๋‚œ์ด๋„ ์ •๋‹ต๋ฅ 
โ˜…โ˜… -%

ํ”„๋ฆฌ๋ฏธ์—„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ„ํด๋ฆฌ ๋น„ํƒ€์•Œ๊ณ  ์‹œ์ฆŒ3 1์ฃผ์ฐจ

 

๊ตฌ๋ฆ„EDU - Be Really Excellent!

๊ตฌ๋ฆ„EDU๋Š” ์ „๊ตญ ๋Œ€ํ•™, ๊ธฐ์—… ๋“ฑ์—์„œ ํ™œ์šฉ ์ค‘์ธ ์˜จ๋ผ์ธ ํ•™์Šต ๋ฐ ๊ต์ˆ˜ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ IT๋ถ„์•ผ์— ๋Œ€ํ•ด ๋ฐฐ์›Œ ๋ณด์„ธ์š”. ์—ฌ๋Ÿฌ๋ถ„์˜ ์ปค๋ฆฌ์–ด ํŒจ์Šค์— ํ™•์‹คํ•œ ๋„์›€์„ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

edu.goorm.io

๋ฌธ์ œ

๋ฐฑ์‹ ์€ ํ•œ ๋ช…์˜ ํ™˜์ž์—๊ฒŒ ์ ‘์ข…ํ•˜๋ฉด ๋ฐ”์ด๋Ÿฌ์Šค์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•ด๋‹น ์‚ฌ๋žŒ๊ณผ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์ ‘์ด‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ „ํŒŒ๋˜์–ด ๊ทธ ์‚ฌ๋žŒ๋“ค๊นŒ์ง€ ๋ชจ๋‘ ์น˜๋ฃŒํ•œ๋‹ค. ๋งค์šฐ ํšจ๊ณผ์ ์ด๊ณ  ๋น ๋ฅธ ์†๋„๋กœ ์ „ํŒŒ๋˜์ง€๋งŒ, ์ œ์ž‘ ๋น„์šฉ์ด ๋„ˆ๋ฌด ๋งŽ์ด ๋“ ๋‹ค๋Š” ๋‹จ์ ์œผ๋กœ ์ธํ•ด ํ˜„์žฌ ํ”„๋กœํ†  ํƒ€์ž…์œผ๋กœ ์ œ์ž‘๋œ ๋‹จ ํ•˜๋‚˜์˜ ๋ฐฑ์‹ ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด๋‹ค.

ํ•˜๋‚˜์˜ ๋ฐฑ์‹ ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ€์žฅ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์„ ์น˜๋ฃŒํ•˜๊ณ ์ž ํ•  ๋•Œ, ์–ด๋–ค ์‚ฌ๋žŒ์—๊ฒŒ ๋ฐฑ์‹ ์„ ์ ‘์ข…ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ตฌํ•ด๋ณด์ž.

ํ™˜์ž๋“ค์˜ ์ˆ˜ N, ํ™˜์ž ์‚ฌ์ด ๊ด€๊ณ„์˜ ์ˆ˜ M

2 ≤ N, M 200,000

๊ด€๊ณ„๋Š” a b ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ง€๊ณ , ๋‘ ํ™˜์ž๊ฐ€ ์„œ๋กœ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์ ‘์ด‰ํ•  ์ˆ˜ ์žˆ์Œ์„ ๋œปํ•œ๋‹ค.

 

ํ•ด๊ฒฐ

key point, DFS๋˜๋Š”BFS๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ตœ๋Œ€ ๋…ธ๋“œ ๊ฐœ์ˆ˜์™€ ์‹œ์ž‘ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๋ฅผ ๊ตฌํ•œ๋‹ค.
  • 2์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๊ณ„ a, b๊ฐ€ ์ฃผ์–ด์ง€๋ฉด aํ–‰์— b๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  bํ–‰์— a๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • 1๋ถ€ํ„ฐ N๋ฒˆ ํ™˜์ž๊นŒ์ง€ ํ™•์ธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ํ™˜์ž์˜ ์ˆ˜๋ฅผ ์„ผ๋‹ค.
  • 1๋ฒˆ ๋ถ€ํ„ฐ i-1๋ฒˆ๊นŒ์ง€ ํ™˜์ž ์ค‘ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ํ™˜์ž์˜ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ปธ๋˜ ๊ฐ’์„ maxCnt๋ผ๊ณ  ํ•˜๊ณ  
  • i๋ฒˆ์งธ ํ™˜์ž์™€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ํ™˜์ž์˜ ์ˆ˜๊ฐ€ cnt์ผ ๋•Œ
  • maxCnt < cnt ์ด๋ฉด maxCnt๋ฅผ cnt๋กœ ๊ฐฑ์‹ ํ•˜๊ณ , maxNum ์„ i๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.

1๋ฒˆ ๋ถ€ํ„ฐ N ๋ฒˆ ํ™˜์ž๊นŒ์ง€ ๋ชจ๋‘ ํ™•์ธ์„ ํ–ˆ๋‹ค๋ฉด,
'๋ฐฑ์‹ ์„ ๊ฐ€์žฅ ๋งŽ์ด ํผ๋œจ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ ‘์ข…ํ•ด์•ผ ํ•˜๋Š” ํ™˜์ž์˜ ๋ฒˆํ˜ธ(maxNum)'์™€ 'ํ•ด๋‹น ํ™˜์ž์—๊ฒŒ ๋ฐฑ์‹ ์„ ์ ‘์ข…ํ–ˆ์„ ๋•Œ ์น˜๋ฃŒํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜์ž์˜ ์ˆ˜(maxCnt)'๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ฝ”๋“œ

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
32
33
34
35
36
37
38
39
#include <iostream>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<int>> v;
int n, m, maxNum, maxCnt, cnt;
int chk[200005];
void dfs(int num) {
    for (auto child: v[num]) {
        if (!chk[child]) {
            cnt++;
            chk[child] = 1;
            dfs(child);
        }
    }
}
int main() {
    scanf("%d %d"&n, &m);
    v.resize(n+1);
    for (int i = 0, a, b; i < m; i++) {
        scanf("%d %d"&a, &b);
        v[a].push_back(b);
        v[b].push_back(a);
    }
    for (int i = 1; i <= n; i++) {
        if (!chk[i]) {
            cnt = 1;
            chk[i] = 1;
            dfs(i);
            if (maxCnt < cnt) {
                maxCnt = cnt;
                maxNum = i;
            }
        }
    }
    printf("%d %d", maxNum, maxCnt);
    return 0;
}
cs

 

ํ›„๊ธฐ

๋‚˜๋Š” DFS๋กœ ํ’€์—ˆ์ง€๋งŒ ํ•ด์„ค์„ ํ™•์ธํ•˜๋‹ˆ, 1๋ถ€ํ„ฐ N(200,000)๊นŒ์ง€ ์›ํ˜•์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ทธ๋ž˜ํ”„์ผ ๊ฒฝ์šฐ DFS๋กœ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ํ•œ ๋ฒˆ์˜ DFS๋กœ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด BFS๋กœ ํ‘ธ๋Š”๊ฒŒ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

์žฌ๊ท€ํ•จ์ˆ˜๋Š” ์Šคํƒ ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํ’€๊ณ  ์žˆ๋Š” ๋ฌธ์ œ์˜ ์Šคํƒ ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์ด ์ž‘๋‹ค๋ฉด DFS๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

+ ๊ตฌ๋ฆ„ ์ฑ„์ ํ™˜๊ฒฝ์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์€ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋ฏ€๋กœ ํ•ด๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

 

์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ž€?

์Šคํƒ ํฌ์ธํ„ฐ๊ฐ€ ์Šคํƒ์˜ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด์„ค ๋•Œ ์ผ์–ด๋‚œ๋‹ค. ํ˜ธ์ถœ ์Šคํƒ์€ ์ œ์•ˆ๋œ ์–‘์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์ด๋ฃจ๋ฉฐ ๋Œ€๊ฐœ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์‹œ ๊ฒฐ์ •๋œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์ด ํ˜ธ์ถœ ์Šคํƒ์—์„œ ์ด์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„ ์ด์ƒ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ๋•Œ, ์Šคํƒ์ด ์˜ค๋ฒ„ํ”Œ๋กœ(overflow)๋œ๋‹ค๊ณ  ํ•˜๋ฉฐ ์ด ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

๋Œ“๊ธ€