백준/ Silver 1 문제 , 백준 파이썬 1325 , 효율적인 해킹 [BFS]
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
pypy3 로 통과
문제 출처
https://www.acmicpc.net/problem/1325
풀이
1. 기본 세팅
1. deque 선언
2. N, M 입력받기
3. N+1 크기의 빈 그래프 생성
4. M 행의 입력 받아 그래프에 저장
2. BFS
시작 값 전달 받아 시작점부터 해킹을 퍼트릴 수 있는 컴퓨터의 갯수 세주기
이때, tmp 변수를 선언해 새 노드를 방문할때마다 카운트 해주고
방문한 노드는 dq에 추가하여 문어발식으로 확장시킴.
3. BFS 호출 및 리턴값 처리
graph에 값이 있는 index 만 bfs 호출
result에 리턴 값을 저장하고, 그 값이 가장 클 시 리스트에 담아 생성한다.
만약, 이미 나온 최고값과 동일할 시 그 리스트에 추가하여 준다.
정답
from collections import deque
import sys
input=sys.stdin.readline
N,M=map(int,input().split())
graph=[[] for _ in range(N+1)]
for i in range(M):
x,y=map(int,input().split())
graph[y].append(x)
def bfs(start):
tmp=0
dq=deque()
dq.append([start,0])
visited=[False]*(N+1)
visited[start]=True
while dq:
node,cnt=dq.popleft()
for i in graph[node]:
if visited[i]==False:
visited[i]=True
dq.append([i,cnt+1])
tmp+=1
return tmp
MAX=0
answer=[]
for i in range(1,N+1):
if graph[i]:
result=bfs(i)
if MAX < result:
MAX=result
answer=[i]
elif MAX==result:
answer.append(i)
print(*answer)
반응형
'알고리즘 공부 > 백준 - 파이썬' 카테고리의 다른 글
백준/ Gold 4 문제 , 백준 파이썬 2573, 빙산 [BFS] (0) | 2022.07.26 |
---|---|
백준/ Gold 4 문제 , 백준 파이썬 2636 , 치즈 [BFS] (0) | 2022.07.26 |
백준/ Gold 3 문제 , 백준 파이썬 16236 , 아기 상어 [BFS] (0) | 2022.07.25 |
백준/ Silver 1 문제 , 백준 파이썬 11403, 경로 찾기 [플로이드 워셜] (0) | 2022.07.22 |
백준/ Silver 2 문제 , 백준 파이썬 24445, 알고리즘 수업 - 너비 우선 탐색 2 [BFS] (0) | 2022.07.22 |