๊ธฐ๋ก๋ฐฉ

BOJ_2606 : ๋ฐ”์ด๋Ÿฌ์Šค ๋ณธ๋ฌธ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

BOJ_2606 : ๋ฐ”์ด๋Ÿฌ์Šค

Soom_1n 2022. 4. 30. 21:36

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

2606๋ฒˆ: ๋ฐ”์ด๋Ÿฌ์Šค

์ฒซ์งธ ์ค„์—๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋Š” 100 ์ดํ•˜์ด๊ณ  ๊ฐ ์ปดํ“จํ„ฐ์—๋Š” 1๋ฒˆ ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ ์Œ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด

www.acmicpc.net


๐Ÿ”น ๋ฌธ์ œ ๐Ÿ”น

์‹ ์ข… ๋ฐ”์ด๋Ÿฌ์Šค์ธ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ „ํŒŒ๋œ๋‹ค. ํ•œ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๋ฉด ๊ทธ ์ปดํ“จํ„ฐ์™€ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ์ปดํ“จํ„ฐ๋Š” ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 7๋Œ€์˜ ์ปดํ“จํ„ฐ๊ฐ€ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. 1๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๋ฉด ์›œ ๋ฐ”์ด๋Ÿฌ์Šค๋Š” 2๋ฒˆ๊ณผ 5๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ๊ฑฐ์ณ 3๋ฒˆ๊ณผ 6๋ฒˆ ์ปดํ“จํ„ฐ๊นŒ์ง€ ์ „ํŒŒ๋˜์–ด 2, 3, 5, 6 ๋„ค ๋Œ€์˜ ์ปดํ“จํ„ฐ๋Š” ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ 4๋ฒˆ๊ณผ 7๋ฒˆ ์ปดํ“จํ„ฐ๋Š” 1๋ฒˆ ์ปดํ“จํ„ฐ์™€ ๋„คํŠธ์›Œํฌ์ƒ์—์„œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

์–ด๋Š ๋‚  1๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ ธ๋‹ค. ์ปดํ“จํ„ฐ์˜ ์ˆ˜์™€ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ •๋ณด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, 1๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ํ†ตํ•ด ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ”น ์ž…๋ ฅ ๐Ÿ”น

์ฒซ์งธ ์ค„์—๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋Š” 100 ์ดํ•˜์ด๊ณ  ๊ฐ ์ปดํ“จํ„ฐ์—๋Š” 1๋ฒˆ ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ ์Œ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด์–ด์„œ ๊ทธ ์ˆ˜๋งŒํผ ํ•œ ์ค„์— ํ•œ ์Œ์”ฉ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ์˜ ๋ฒˆํ˜ธ ์Œ์ด ์ฃผ์–ด์ง„๋‹ค.

 

๐Ÿ”น ์ถœ๋ ฅ ๐Ÿ”น

1๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ ธ์„ ๋•Œ, 1๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ํ†ตํ•ด ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋ฅผ ์ฒซ์งธ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”น ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜ ๐Ÿ”น

  • ๊ทธ๋ž˜ํ”„ ์ด๋ก 
  • ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰
  • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰
  • ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰

๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

DFS, BFS ๋ฐฉ์‹์œผ๋กœ ํ’€๋ฆฌ๋Š” ๋ฌธ์ œ์ด๋‹ค. ํ•„์ž๋Š” BFS๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

com = int(input())
num = int(input())
connect = [[i] for i in range(com)]
visit = [False] * com


for i in range(num):
    a, b = map(int, input().split())
    connect[a-1].append(b-1)
    connect[b-1].append(a-1)

count = 0
stack = [0]

while stack:
    i = stack.pop()
    if not visit[i]:
        visit[i] = True
        count += 1
        for j in connect[i]:
            if not visit[j]:
                stack.append(j)

print(count - 1)

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

com = int(input())
num = int(input())
connect = [[i] for i in range(com)]
visit = [False] * com
 - com : ์ „์ฒด ์ปดํ“จํ„ฐ์˜ ์ˆ˜
 - num : ์ž…๋ ฅ ๋  ์—ฐ๊ฒฐ ์ •๋ณด ์ˆ˜
 - connect : ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ -> (์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ-1) ์„ ์ธ๋ฑ์Šค๋กœ ์ƒ๊ฐ
 - visit : ์ปดํ“จํ„ฐ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ๋ฆฌ์ŠคํŠธ
for i in range(num):
    a, b = map(int, input().split())
    connect[a-1].append(b-1)
    connect[b-1].append(a-1)

 - connect์— ์—ฐ๊ฒฐ ์ •๋ณด ์ €์žฅ

 - ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ๋„ ์ €์žฅ

count = 0
stack = [0]

while stack:
    i = stack.pop()
    if not visit[i]:
        visit[i] = True
        count += 1
        for j in connect[i]:
            if not visit[j]:
                stack.append(j)

print(count - 1)

- count : ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฐ์—ผ๋œ PC์˜ ์ˆ˜

- stack : BFS๋ฅผ ์œ„ํ•œ ์Šคํƒ์šฉ ๋ฆฌ์ŠคํŠธ

- ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋˜ PC์— ๋ฐฉ๋ฌธํ•˜๋ฉด, ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ PC๋“ค ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ PC๋งŒ ๋ฐฉ๋ฌธ ์ค€๋น„(์Šคํƒ ์‚ฝ์ž…)

- ์‹œ์ž‘ PC๋ฅผ ์ œ์™ธํ•˜๊ธฐ ์œ„ํ•ด์„œ -1 ํ›„ ์ถœ๋ ฅ


๐Ÿ”ธ end ๐Ÿ”ธ

์ฒ˜์Œ์—” DFS๋กœ ํ’€์ดํ•˜๊ณ ์ž ํ–ˆ์ง€๋งŒ ์‹คํŒจํ•ด์„œ BFS๋กœ ํ’€์ดํ–ˆ๋‹ค.๋‹ค๋ฅธ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ DFS๋ณด๋‹ค BFS๊ฐ€ ์ฒ˜๋ฆฌ ์†๋„๋Š” ๋” ๋น ๋ฅธ ๊ฒƒ ๊ฐ™๋‹ค.

 

728x90