Skip to content

Commit

Permalink
Merge pull request #23 from INIT-Algorithm/joonhee
Browse files Browse the repository at this point in the history
#17 : Week5 준희이티
  • Loading branch information
devCharlotte authored May 23, 2023
2 parents cf1fb9a + ffdac8d commit d497b13
Show file tree
Hide file tree
Showing 3 changed files with 168 additions and 0 deletions.
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)

0 comments on commit d497b13

Please sign in to comment.