바이러스
알고리즘
입력에서 직접 연결되어 있는 쌍이 주어진다.
더보기
1 2
2 3
1 5
5 2
5 6
4 7
1번 노드는 2번 노드와, 2번 노드는 3번 노드와 1번 노드는 5번 노드와 ∙∙∙ 연결되어있다는 뜻이다.
이렇게 정의하는 그래프를 양방향 그래프라고 하고, 다음과 같이 코드로 구현할 수 있다.
- 양방향 그래프를 2차원 리스트로 정의
graph = [[] for _ in range(n+1)]
for _ in range(m):
x,y=map(int, input().split())
graph[x].append(y)
graph[y].append(x)
- 인접노드를 방문할 때마다(재귀의 한 사이클이 끊기지 않을 때) 카운팅 하기
- 카운팅 횟수를 재귀함수 호출 및 반환 마다 공유 하면서 값이 연결되도록 해야 한다.
- 즉, 재귀가 return될 때마다 카운트 횟수를 쌓아줘야 함 return cnt,
- 호출 누적을 위한 cnt = dfs(i, cnt+1)
def dfs(x, cnt):
visited[x] = True
for i in graph[x]:
if not visited[i]:
cnt = dfs(i, cnt+1)
return cnt
전체 코드
import sys;input=sys.stdin.readline
sys.setrecursionlimit(2000)
n = int(input())
m = int(input())
visited = [False for _ in range(n+1)]
graph = [[] for _ in range(n+1)]
cnt = 0
for _ in range(m):
x, y = map(int, input().rsplit())
graph[x].append(y)
graph[y].append(x)
# 인접 노드 방문
def dfs(x, cnt):
visited[x] = True
for i in graph[x]:
if not visited[i]:
cnt = dfs(i, cnt+1)
return cnt
print(dfs(1, 0))
'PS > BOJ&Programmers' 카테고리의 다른 글
[백준/5671] 호텔 방 번호 | 중복값 개수 세기(딕셔너리와 SET) (0) | 2024.03.17 |
---|---|
[백준/1068] 트리 (0) | 2024.03.06 |
[백준/22232] 가희와 파일 탐색기 (0) | 2024.02.28 |
[프로그래머스] 자동차기록에서 장기/단기 대여 구분하기 | DATEDIFF, SQL IF문 (0) | 2024.02.23 |
[프로그래머스] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 | LIKE 사용법 (1) | 2024.02.11 |