반응형
250x250
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
- python
- 정보처리기사 실기 시험
- 백준 N-Queens
- 백준 백트랙킹 파이썬
- 프로그래밍
- 백준
- 프로그래머스
- 정보처리기사
- 자료구조
- 그리디
- 자바
- BOJ
- it
- 2022년 정보처리기사 실기 1회 가답안
- 백준 그래프 탐색 파이썬
- 2022년 정보처리기사 실기 가답안
- 2022년 정보처리기사 실기
- 백준 그래프 이론 파이썬
- 알고리즘
- 정보처리기사 실기
- 코드
- 코딩
- 파이썬
- 코딩테스트
- dfs
- 토마토
- 백준 백트랙킹
- 프로그래머스 파이썬
- BFS
- 백준 토마토 파이썬
Archives
- Today
- Total
코딩,안되면 될때까지
[백준 2606번-바이러스]-파이썬 본문
728x90
반응형
<문제>
https://www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어
www.acmicpc.net
<풀이>
1.각 컴퓨터의 방문여부를 저장하는 배열(visited)을 선언한다.
2.-DFS풀이법-
2-1. 1번에서 출발하므로 visited[1]에 방문을 체크한다.
2-2. 1번과 연결되어있는 컴퓨터로 이동해 방문 여부를 확인한다.
2-3. 방문하지 않은 경우 바이러스를 확산시키고(count+=1) DFS 함수를 재귀적으로 호출한다.
2-4. 연결되어 있는 노드가 이미 방문이 된경우 연결되어있는 다른 노드로 이동한다.
2-5. 1번과 연결되어있는 모든 노드가 방문된 경우 종료된다.
3.-BFS풀이법-
3-1. 1번에서 출발하므로 큐에 1을 삽입한다.
2-2. 1번을 큐에서 추출하고 1번에 방문표시를 한다.
2-3. 큐에서 추출된 컴퓨터와 연결된 모든 컴퓨를 큐에 삽입하고 큐에서 원소를 하나씩 추출한다.
2-4. 추출된 원소가 방문되어있지 않은 경우 방문표시를 하고 바이러스에 감염시킨다(count+=1).
2-5. 큐에서 추출된원소와 연결된 모든 컴퓨터를 큐에 삽입한다.
2-6. 큐가 빌때까지 위 2-3번~2-5번 과정을 반복한다.
<코드>-파이썬
-DFS풀이법-
import sys
n = int(sys.stdin.readline()) #컴퓨터의 갯수
k = int(sys.stdin.readline()) #연결된 쌍의 갯수
graph = [[] for _ in range(n+1)]
for i in range(k):
a,b = map(int,sys.stdin.readline().split())
graph[a].append(b)
graph[b].append(a)
count = 0
visited = [False]*(n+1)
#DFS 알고리즘
def dfs(x):
global count
visited[x] = True
for i in graph[x]:
if not visited[i]:
count+=1
dfs(i)
dfs(1)
print(count)
-BFS풀이법-
from collections import deque
import sys
n = int(sys.stdin.readline()) #컴퓨터의 갯수
k = int(sys.stdin.readline()) #연결된 쌍의 갯수
graph = [[] for _ in range(n+1)]
for i in range(k):
a,b = map(int,sys.stdin.readline().split())
graph[a].append(b)
graph[b].append(a)
count = 0
visited = [False]*(n+1)
#BFS 알고리즘
def bfs(x):
global count
queue = deque()
queue.append(x)
while queue:
a = queue.popleft()
visited[a] = True
for i in graph[a]:
if not visited[i]:
visited[i] = True
queue.append(i)
count+=1
return count
print(bfs(1))
728x90
반응형
'백준 > 백준-파이썬' 카테고리의 다른 글
[백준 11724번-연결요소의 개수]-파이썬 (16) | 2022.03.12 |
---|---|
[백준 1012번-유기농 배추]-파이썬 (30) | 2022.03.11 |
[백준 18405번 -경쟁적 전염]-파이썬 (0) | 2022.03.10 |
[백준-14502번-연구소] - 파이썬 (4) | 2022.03.08 |
[백준]2667-단지번호붙이기 (8) | 2022.03.06 |
Comments