Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 가장 긴 증가하는 부분수열
- BOJ 2606
- LCS2
- 데카르트 곱
- 대소비교
- BFS
- 12865
- 미로탐색
- 백준_2178
- 프로그래머스
- 리스트
- 평범한 배낭
- 9663
- 백준 9252
- 파이썬
- 소수찾기
- 백준
- 8-queen
- 알고리즘
- boj 11053
- 2606
- 타겟 넘버
- 백준 12015
- 백준 1535
- list
- 백준 2606
- dfs
- 증가하는 부분수열 2
- python
- 냅색
Archives
- Today
- Total
Devlog_by_0giru
[boj] 바이러스_2606 본문
# 바이러스
from collections import deque
# N은 노드의 개수
# M은 노드가 연결된 정보의 입력 횟수
N = int(input())
M = int(input())
# BFS알고리즘 활용을 위해 collections 모듈의 deque를 활용
queue = deque()
result = []
# 0번 인덱스는 활용하지 않고, 방문 여부를 체크해 줄 리스트 생성. 초기에는 모두 False이다.
visited = [False] * (N+1)
# 전체 그래프를 표현하기 위한 빈 리스트 생성
graph = [[] for _ in range(N+1)]
# 입력 정보를 이용해 그래프 생성을 위한 for 루프
for _ in range(M):
i, j = map(int, input().split())
# 일단 a-b 연결관계를 모두 입력 받아 a b노드 모두에 연결 정보를 저장한다
graph[i].append(j)
graph[j].append(i)
# 그래프 노드 연결 정보를 정렬하는 루프
for i in range(len(graph)):
graph[i].sort()
# bfs알고리즘 함수
def bfs(par_graph, par_start, par_visited):
queue.append(par_start)
visited[par_start] = True
while queue:
temp = queue.popleft()
result.append(temp)
for i in par_graph[temp]:
if not par_visited[i]:
queue.append(i)
par_visited[i] = True
# bfs 알고리즘 함수 실행
bfs(graph, 1, visited)
# 결과 출력
print(len(result)-1)
2606번 바이러스 문제는 전형적인 bfs를 활용하는 문제였다.
이번 문제 역시 그래프는 빈 리스트를 포함하는 이중리스트로 구현했다. 0번 노드는 없으므로 0번 인덱스의 리스트는 사용하지 않았다.
위 방법으로 그래프를 구현하면 1번 인덱스의 리스트에는 1번 노드와 연결된 노드 번호를, 2번 인덱스의 리스트에는 2번 노드와 연결된 노드 번호를, ... 의 방법으로 그래프가 구현될 것이다. 이렇게 표현하는 것이 가장 보기 좋은 것 같다.
큐에 들어간 노드들은 연결 처리되는 노드이므로 이를 result 라는 리스트에 담아 그 길이를 출력하되, 1번 노드는 제외하므로 결과에서 -1 한 값을 출력해주었다.
딱히 구현에 어려운 부분이 있지는 않았으나 bfs 알고리즘 부분을 구현할 때 원활하지 않이 포스팅을 통해 다시 개념을 정리할 계획이다.
+) 코드를 작성하고 '만약 노드 연결정보가 중복되면(ex. 7 6이 입력되고 다시 7 6이 입력되는 경우) 그래프에서 연결 정보가 중복되어 문제가 발생하지 않나?' 하는 의문이 들었으나, 그래프의 각 인덱스에 해당하는 리스트에서 값을 이용해 확인 여부를 visited 리스트에 체크해 주므로 노드 연결 정보가 중복되어도 문제가 없이 동작한다.
※ 해당 게시물은 개인 코딩 공부를 위해 작성하는 글입니다. 문제가 있을 경우 dusrlf2003@naver.com으로 연락주세요!
'[PS]' 카테고리의 다른 글
[boj] 알파벳_1987 (0) | 2021.02.23 |
---|---|
[boj] 유기농 배추_1012 (0) | 2021.02.18 |
[프로그래머스] 여행 경로 (0) | 2021.02.15 |
[boj] 단지 번호 붙이기_2667 (0) | 2021.02.13 |
[boj] DFS와 BFS_1260 (0) | 2021.02.08 |