Po_tta_tt0
콩심콩 팥심팥 🌱
Po_tta_tt0
전체 방문자
오늘
어제
  • 분류 전체보기 (266)
    • 🐛 회고 (14)
    • 💭 생각 (2)
    • 🤸‍♀️ 내 프로젝트 (16)
      • FISH-NEWS (8)
      • MBTI 과몰입 테스트 (2)
      • twitter clonecoding with TS (4)
      • pilzagenda (2)
    • 👨‍👩‍👧‍👦 팀 프로젝트 (2)
      • 피우다 프로젝트 (0)
      • SEMO(세상의 모든 모임) (1)
      • 마음을 전하는 텃밭 (1)
      • Stackticon (0)
    • 👨‍💻 CS지식 (11)
    • ✍ 공부 (94)
      • JavaScript (21)
      • TypeScript (39)
      • Html (0)
      • CSS (2)
      • React (18)
      • NextJS (7)
      • Vue (1)
      • Python (1)
      • Django (0)
      • 개발환경 & 그 외 (2)
    • 🏄‍♀️ 코딩테스트 (99)
      • 🐍 Python (99)
    • 🐙 Git & GitHub (3)
    • 📑 오류기록 (8)
    • 📚 우리를 위한 기록 (9)
    • 수업 (3)
    • 강의 등 (2)
    • 👩‍🎓 SSAFY (0)
    • 👋 우테코 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • BFS + DP
  • Next.js
  • 파이썬 다익스트라
  • js
  • dfs
  • 구현
  • 이분탐색
  • 파이썬 감시 피하기
  • 문자열
  • 백준
  • DP
  • bfs
  • 백준 파이썬
  • 파이썬
  • 플로이드 워셜
  • 백준 숨바꼭질
  • 시뮬레이션
  • React
  • react-router-dom
  • 자바스크립트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Po_tta_tt0

콩심콩 팥심팥 🌱

[ 백준 2606 ] ( python ) 바이러스
🏄‍♀️ 코딩테스트/🐍 Python

[ 백준 2606 ] ( python ) 바이러스

2022. 4. 28. 08:26
반응형

 

📚 바이러스

 

문제

신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다.

예를 들어 7대의 컴퓨터가 <그림 1>과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기 때문에 영향을 받지 않는다.

어느 날 1번 컴퓨터가 웜 바이러스에 걸렸다. 컴퓨터의 수와 네트워크 상에서 서로 연결되어 있는 정보가 주어질 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 출력하는 프로그램을 작성하시오.

입력

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

출력

1번 컴퓨터가 웜 바이러스에 걸렸을 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 첫째 줄에 출력한다.

예제 입력 1 복사

7
6
1 2
2 3
1 5
5 2
5 6
4 7

예제 출력 1 복사

4

 

 

 

✍ 접근

  • BFS로만 해결해야 하는 문제가 아니고, DFS가 더 자신있으니 DFS로 푼다
  • 연결된 노드를 graph라는 2차원 배열에 집어넣었다.

 

 

 

정답 코드

# DFS

C = int(input())
N = int(input())

graph = [[0]*(C+1) for _ in range(C+1)]

for _ in range(N):
    a,b = map(int,input().split())
    graph[a][b] = graph[b][a] = 1

visited = []
cnt = 0

def DFS(now):
    global cnt
    visited.append(now)
    for i in range(C+1):
        if graph[now][i] == 1 and i not in visited:
            cnt+=1
            DFS(i)
    else:
        return

DFS(1)
print(cnt)
  • 링크가 양방향이 가능하므로 graph[a][b] = graph[b][a] = 1을 해준다
  • 방문한 노드를 visited에 저장한다
  • 함수 DFS를 돌면서 아직 방문하지 않은 노드가 발견될 시 cnt를 1씩 증가시키고 그 값을 재귀함수로 파고든다
  • for else문으로 더이상 방문할 수 있는 노드가 없을 시 재귀함수를 빠져나간다

 

 

 

⭐ 배움

  • for - else문으로 재귀 함수 빠져나가기
반응형

'🏄‍♀️ 코딩테스트 > 🐍 Python' 카테고리의 다른 글

[ 백준 11725] ( python ) 트리의 부모 찾기  (0) 2022.05.23
[ 백준 1012 ] ( python ) 유기농 배추  (0) 2022.04.28
[ 백준 2667 ] ( python ) 단지번호붙이기  (0) 2022.04.28
[ 백준 2178 ] ( python ) 미로 탐색  (0) 2022.04.28
[ 백준 11399 ] ( python ) ATM  (0) 2022.04.27
    '🏄‍♀️ 코딩테스트/🐍 Python' 카테고리의 다른 글
    • [ 백준 11725] ( python ) 트리의 부모 찾기
    • [ 백준 1012 ] ( python ) 유기농 배추
    • [ 백준 2667 ] ( python ) 단지번호붙이기
    • [ 백준 2178 ] ( python ) 미로 탐색
    Po_tta_tt0
    Po_tta_tt0
    감자의 코딩하는 블로그 콩심은데 콩나고 팥심은데 팥난다

    티스토리툴바