알고리즘

[백준, 1325번] 효율적인 해킹

hminor 2023. 8. 18. 11:55

처음에는 방문을 할 필요가 있을까라는 생각에
방문 없이 제출을 했는데 메모리 초과가 발생해서
방문 체크 후 제출을 했지만 그래도 여전히 시간 초과...
그래서 혹시나 하는 마음에 pypy로 제출을 하니 꾸역꾸역 제출은 완료됐는데... 이게 맞는건가 싶네

풀이 과정

  • 문제를 처음 접했을 때 A가 B를 신뢰하는 경우
    • B를 해킹하면, A도 해킹할 수 있다는 말에 
    • ??? 그러면 반대로 방향있는 선을 만들어야겠다 생각해서
    • 만들어둔 arr에 arr[b].append(a)로 추가
  • 이후 평범한 bfs로 문제 풀이하며
    • 반복문이 순회 마지막에 해당 값이 큰지에 대한 여부 파악 후 마지막 출력 조건에 사용 
import sys
from collections import deque
input = sys.stdin.readline
n,m = map(int,input().split())
arr = [[] for _ in range(n+1)]
li = [0]*(n+1)
mx = 0
for _ in range(m):
    a,b = map(int,input().split())
    arr[b].append(a)

for i in range(1,n+1):
    visit = [False]*(n+1)
    q = deque([i])
    visit[i] = True
    while q:
        li[i] += 1 
        s = q.popleft()
        for x in arr[s]:
            if not visit[x]:
                visit[x] = True
                q.append(x)
    if li[i] > mx: mx = li[i]

[print(i, end=' ') for i in range(1,n+1) if li[i] == mx]
 

'알고리즘' 카테고리의 다른 글

[백준, 9372번] 상근이의 여행  (0) 2023.08.21
[백준, 4963번] 섬의 개수  (0) 2023.08.20
[백준, 11724번] 연결 요소의 개수  (0) 2023.08.15
[백준, 1697번] 숨바꼭질  (0) 2023.08.15
[백준, 7576번] 토마토  (0) 2023.08.14