백준 2606번. 바이러스

2023. 8. 29. 11:36·백준

https://www.acmicpc.net/problem/2606

 

2606번: 바이러스

첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍

www.acmicpc.net

BFS 사용(48ms)

# 1번과 연결되어 있는 컴 수 출력하기
def bfs(arr,start):
    global cnt
    visited = [0] * (n+1)
    q = []
    q.append(start)
    while q:
        t = q.pop(0)
        if not visited[t]:
            visited[t] = 1
            cnt += 1
            for i in arr[t]:
                if not visited[i]:
                    q.append(i)


n = int(input()) # 컴퓨터 수
pair = int(input()) # 직접 연결된 컴퓨터 쌍의 수
arr = [[] for _ in range(n+1)]
cnt = 0
for _ in range(pair):
    com1, com2 = map(int,input().split())
    arr[com1].append(com2)
    arr[com2].append(com1)  # [[], [2, 5], [1, 3, 5], [2], [7], [1, 2, 6], [5], [4]]
bfs(arr,1)
print(cnt-1)

재귀 DFS 사용(56ms)

def dfs(start):
    visited[start] = 1
    for w in range(1,n+1):
        if arr[start][w] == 1 and visited[w] == 0:
            dfs(w)

n = int(input())
pair = int(input())
arr = [[0]*(n+1) for _ in range(n+1)]
visited = [0] * (n+1)
cnt = 0
for _ in range(pair):
    com1, com2 = map(int,input().split())
    arr[com1][com2] = 1
    arr[com2][com1] = 1
dfs(1)
for i in range(2,n+1):
    if visited[i]:
        cnt += 1
print(cnt)

재귀가 아닌 DFS 사용(48ms)

def dfs(start):
    global cnt
    stack = []
    visited[start] = 1
    while True:
        for w in range(1, n+1):
            if arr[start][w] == 1 and visited[w] == 0:
                stack.append(start)
                start = w
                cnt += 1
                visited[start] = 1
                break
        else:
            if stack:
                start = stack.pop()
            else:
                break

n = int(input())
pair = int(input())
arr = [[0]*(n+1) for _ in range(n+1)]
visited = [0] * (n+1)
cnt = 0
for _ in range(pair):
    com1, com2 = map(int,input().split())
    arr[com1][com2] = 1
    arr[com2][com1] = 1
dfs(1)
print(cnt)

+24.10.28 재귀 BFS 사용

n = int(input())
m = int(input())
visited = [0] * (n+1)
arr = [[] for _ in range(n+1)]
for i in range(m):
    a, b = map(int,input().split())
    arr[a].append(b)
    arr[b].append(a)

def recur(node):
    visited[node] = 1
    for i in arr[node]:
        if visited[i] == 1:
            continue
        recur(i)

recur(1)
print(sum(visited)-1)

+24.10.28 재귀 DFS 사용

from collections import deque

n = int(input())
m = int(input())
visited = [0] * (n+1)
arr = [[] for _ in range(n+1)]
for i in range(m):
    a, b = map(int,input().split())
    arr[a].append(b)
    arr[b].append(a)

q = deque()
q.append(1)

while q:
    node = q.popleft()
    visited[node] = 1

    for i in arr[node]:
        if visited[i] == 1:
            continue
        q.append(i)

recur(1)
print(sum(visited)-1)
저작자표시 (새창열림)

'백준' 카테고리의 다른 글

백준 2644. 촌수계산  (0) 2023.08.29
백준 2667. 단지번호붙이기  (0) 2023.08.29
백준 2839. 설탕배달  (0) 2023.08.29
백준 2628. 종이자르기  (0) 2023.08.28
2635. 수 이어가기  (0) 2023.08.28
'백준' 카테고리의 다른 글
  • 백준 2644. 촌수계산
  • 백준 2667. 단지번호붙이기
  • 백준 2839. 설탕배달
  • 백준 2628. 종이자르기
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (382)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅 (5)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (2)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    Til
    개발자취업
    항해99
    코딩테스트준비
    99클럽
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
백준 2606번. 바이러스
상단으로

티스토리툴바