Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions 이티준희/2606_바이러스_BFS.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#2023-05-11-Week5-과제
#2606_바이러스

'''
입력

7 총 컴퓨터 수
6 컴퓨터 간 연결된 선 개수
1 2 1번컴퓨터와 2번컴퓨터 연결
2 3
...
4 7
'''

#bfs 너비 우선 탐색
'''
import sys
from collections import deque
vertex = int(sys.stdin.readline()) # 컴퓨터 개수
edge = int(sys.stdin.readline()) # 연결선 개수

graph = [[NULL] for i in range(vertex+1)] #그래프
visited = [0]*(vertex+1) #1번 인덱스부터 사용

for i in range(edge): # 그래프 생성
a,b = map(int,stdin.split())
graph[a]+=[b] # a 에 b 연결
graph[b]+=[a] # b 에 a 연결

visited[1] = 1 # 1번 컴퓨터부터 시작이니 방문 표시
queue = deque([1])
while queue :
result = queue.popleft()
for i in graph[result]:
if visited[i]==0:
queue.append(i)
visited[i]=1
print(sum(visited)-1)
'''

import sys
from collections import deque

vertex = int(sys.stdin.readline()) # 컴퓨터 개수
edge = int(sys.stdin.readline()) # 연결선 개수

graph = [[] for i in range(vertex + 1)] # 그래프
visited = [0] * (vertex + 1) # 1번 인덱스부터 사용

for i in range(edge): # 그래프 생성
a, b = map(int, sys.stdin.readline().split())
graph[a].append(b) # a 에 b 연결
graph[b].append(a) # b 에 a 연결


def bfs(start):
visited[start] = 1
queue = deque([start])

while queue:
node = queue.popleft()
for i in graph[node]:
if visited[i] == 0:
queue.append(i)
visited[i] = 1

bfs(1) # 1번 컴퓨터부터 시작
print(sum(visited) - 1)






38 changes: 38 additions & 0 deletions 이티준희/2606_바이러스_DFS.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#2023-05-11-Week5-과제
#2606_바이러스

'''
입력

7 총 컴퓨터 수
6 컴퓨터 간 연결된 선 개수
1 2 1번컴퓨터와 2번컴퓨터 연결
2 3
...
4 7
'''

#dfs
import sys

vertex = int(sys.stdin.readline()) # 컴퓨터 개수
edge = int(sys.stdin.readline()) # 연결선 개수

graph = [[] for _ in range(vertex + 1)] # 그래프
visited = [0] * (vertex + 1) # 1번 인덱스부터 사용

for i in range(edge): # 그래프 생성
a, b = map(int, sys.stdin.readline().split())
graph[a].append(b) # a 에 b 연결
graph[b].append(a) # b 에 a 연결


def dfs(node):
visited[node] = 1
for i in graph[node]:
if visited[i] == 0:
dfs(i)


dfs(1) # 1번 컴퓨터부터 시작
print(sum(visited) - 1)
56 changes: 56 additions & 0 deletions 이티준희/5567_결혼식.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#2023-05-11-Week5-수업
#5567_결혼식

'''
입력 값
6
5
1 2
1 3
3 4
2 3
4 5
'''

#bfs

import sys
from collections import deque

'''
이렇게 작성했더니 런타임에러
input = sys.stdin.readline()
N = int(input())
M = int(input())
'''

N = int(sys.stdin.readline())
M = int(sys.stdin.readline())

graph = [[False] * (N + 1) for i in range(N + 1)] #False 대신 0 가능 #1번 인덱스부터 사용

for i in range(M):
a, b = map(int, sys.stdin.readline().split())
graph[a].append(b) # a 인덱스에 b 넣기
graph[b].append(a) # b 인덱스에 a 넣기

#1번 인덱스 -> 본인 -> 본인의 친구

visited = [0] * (N + 1) # false 대신 0 이어야 함 -> 덧셈 연산 수행을 위해 int형

def bfs(vertex):
queue = deque([vertex])
visited[vertex] = 1
while queue: #queue==1일 때 반복
vertex = queue.popleft() #deque의 popleft()은 list의 pop(0)와 같지만 O(1)임
for i in graph[vertex]:
if visited[i] == 0:
queue.append(i)
visited[i] = visited[vertex] + 1
bfs(1)
result = 0 #초대하는 동기의 수
for i in range(2,N+1):
if (visited[i] != 0) and (visited[i] < 4) : # 본인/친구/친구의 친구 -> visited 수 범위 1~3
#if 0 < visited[i] <=3 : 이게 더 간결함
result += 1 #visited 범위에 해당하면 누적합 계산
print(result)