[Baekjoon/๐ŸฅˆSilverโ…ก] 11724: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

1 ๋ถ„ ์†Œ์š”

Intro

๋ฌธ์ œ์‚ฌ์ง„

์ ‘๊ทผ ๋ฐฉ๋ฒ•๐Ÿ™‹โ€โ™€๏ธ

์—ฐ๊ฒฐ ์š”์†Œ?

  • ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์—ฐ๊ฒฐ ์š”์†Œ๋ž€ ํ•˜๋‚˜๋กœ ์ด์–ด์ง„ ๊ทธ๋ž˜ํ”„๋ผ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.

  • ๋‹ค์Œ์˜ ์˜ˆ์ œ์—์„œ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋Š” ๋‘๊ฐœ์ด๋‹ค.
  • ์—ฐ๊ฒฐ ์š”์†Œ๋ผ๋ฆฌ๋Š” ์„œ๋กœ ์ด์–ด์ง€์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
    • ๋งŒ์•ฝ (1, 2, 3)๊ณผ (4, 5, 6) ์‚ฌ์ด ํ•˜๋‚˜์˜ ๊ฐ„์„ ์ด๋ผ๋„ ์กด์žฌํ•œ๋‹ค๋ฉด ์—ฐ๊ฒฐ ์š”์†Œ๋Š” 1๊ฐœ๊ฐ€ ๋œ๋‹ค.

์ ‘๊ทผ ๋ฐฉ๋ฒ•?

ํ•ด๋‹น ๋ฌธ์ œ๋Š” bfs ๋˜๋Š” dfs๋ฅผ ์ ์šฉํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

โ— bfs: ๋„“์ด ์šฐ์„  ํƒ์ƒ‰

โ— dfs: ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰


Algoritm๐Ÿ‘ฉโ€๐Ÿ’ป

  • ์ฒ˜์Œ ๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ์ ‘ํ•˜๊ณ  bfs๋‚˜ dfs ๋ฐฉ์‹์ด ์•„๋‹Œ ๋‚ด ๋‚˜๋ฆ„์˜ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์•˜๋‹ค.
#21.01.08
#11724: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

import sys
n, m = map(int, sys.stdin.readline().rstrip().split())
lst = []
check = set()
cnt = 0

for i in range(m):
  temp = list(map(int, sys.stdin.readline().rstrip().split()))
  temp.sort()
  lst.append(temp)
lst.sort(key= lambda i : (i[0], i[1]))

for f, b in lst:
  if f not in check and b not in check:
    cnt += 1
  check.add(f)
  check.add(b)

l = n - len(check)
print(cnt + l)
  • ๊ฐ„์„ ๋“ค์„ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ ์ž‘์€ ์ˆ˜๊ฐ€ ์•ž์— ์˜ค๋„๋ก ์ •๋ ฌ์„ ํ•˜์˜€๋‹ค.
    • ๋˜, ๊ฐ„์„ ๋“ค๋ผ๋ฆฌ๋„ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์˜€๋‹ค.


  • ๊ฐ„์„ ์„ ํ•˜๋‚˜์”ฉ ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ set์— ๊ฐ„์„ ์— ํฌํ•จ๋œ ์ •์ ๋“ค์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.
    • set์€ ์ค‘๋ณต ์ €์žฅ์ด ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ตœ์ข…์ ์œผ๋กœ ๋ฐฉ๋ฌธํ•œ ์ •์ ๋งŒ์ด ์ €์žฅ๋œ๋‹ค.
    • ๊ฐ„์„ ์— ํฌํ•จ๋œ ๋‘ ์ •์ ์ด ๋ชจ๋‘ set์— ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ => ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ ์š”์†Œ์ด๋ฏ€๋กœ cnt๊ฐ’์„ ํ•˜๋‚˜ ์ฆ๊ฐ€ํ•œ๋‹ค.


  • cnt๊ฐ’๊ณผ ํ•˜๋‚˜์˜ ์ •์ ์ด ์—ฐ๊ฒฐ ์š”์†Œ๋ฅผ ์ด๋ฃจ๋Š” ๊ฒฝ์šฐ๋ฅผ ํฌํ•จํ•ด ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ œ์ถœ๊ฒฐ๊ณผ

  • ๋ณต์žกํ•œ ๋ฐฉ๋ฒ•๋งŒํผ์ด๋‚˜ ์‹œ๊ฐ„์ด ๋งค์šฐ ๋งŽ์ด ๊ฑธ๋ฆฐ๋‹คโ€ฆใ… ใ… 

Algorithm๐Ÿ‘ฉโ€๐Ÿ’ป: BFS

  • ๊ทธ๋ ‡๋‹ค๋ฉด bfs๋ฅผ ์ ์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ดํŽด๋ณด์ž!
#21.01.08
#11724: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜
#bfs ์‚ฌ์šฉํ•˜๊ธฐ

import sys
n, m = map(int, sys.stdin.readline().split())
graph = [[] for _ in range(n+1)]
visited = [0 for _ in range(n+1)]

for i in range(m):
  f, b = map(int, sys.stdin.readline().split())
  graph[f].append(b)
  graph[b].append(f)

def bfs(v):
  order = [v]
  while order:
    t = order.pop()
    for j in graph[t]:
      if visited[j] == 0:
        order.append(j)
        visited[j] = 1

result = 0
for k in range(1, n+1):
  if visited[k] == 0:
    bfs(k)
    result += 1

print(result)

๊ฒฐ๊ณผ

  • ์œ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์‹œ๊ฐ„์ฐจ์ด๊ฐ€ ์—„์ฒญ๋‚œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!!!!!


๊ทธ๋Ÿผ ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๋„๋ก ํ•œ๋‹ค!!

๋!! ~(ห˜โ–พห˜~)

์ฐธ๊ณ ๐Ÿ“ƒ

https://velog.io/@i-zro/fdfdf

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ