대충이해하고 구현해서 메모리초과 되기
처음 문제를 보고
- DFS/BFS로 영역구분 문제처럼 풀면 되겠구나!
문제에 대한 오해
- "A가 B를 신뢰하는경우 = B를 해킹하면 A도 해킹할 수 있다" 의 말 의 뜻
- 내가 오해한 바 : A-B연결된 경우- A를 해킹하면 B 해킹가능(O) & B해킹하면 A 해킹가능 (O)
- 문제가 뜻한 바 : A-B연결된 경우- A를 해킹하면 B 해킹가능(X) & B해킹하면 A 해킹가능 (O)
- 방향이 있는 그래프인데, 무방향 그래프로 착각한거나 마찬가지다 ㅎㅎ
- 미리 예제를 손으로 시물레이션 돌려보고, 정확히 이해했는지 확인하자
첫 풀이
from collections import deque
# 데이터 입력받기
n, m = map(int, input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m) :
a, b = map(int, input().split())
#graph[a].append(b) # 양방향 그래프인 경우
graph[b].append(a)
total_info = []
def bfs(start) :
q = deque([start])
visited = [False] * (n+1)
visited[start] = True
visited_info = [start]
while(q) :
v = q.popleft()
for _v in graph[v] :
if visited[_v] == False :
q.append(_v)
visited[_v] = True
visited_info.append(_v)
return visited_info
# 모든 노드에 대하여 bfs 실행
for i in range(1, n+1) :
total_info.append(bfs(i))
# 가장 길이가 긴 노드들 출력
max_len = -1
max_idx_arr = []
for i, arr in enumerate(total_info) :
if len(arr) >= max_len :
max_len = len(arr)
max_idx_arr.append(i+1)
for v in max_idx_arr :
print(v, end=' ')
첫풀이 결과

메모리 초과는 흔하지 않은데ㅎㅎ
해결에만 중점을 두고 너무 메모리를 남발하면서 짜긴 했다.
굳이 어떤 노드가 어떤 노드랑 부모관계를 맺는지 기록하지 않고, 수만 count 해도 됐었다. (다짜고나서 깨닫;ㅅ;)
메모리를 더 효율적으로 사용하게 더 깔끔하게 짜봤다.
두번째 풀이
from collections import deque
# 데이터 입력받기
n, m = map(int, input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m) :
a, b = map(int, input().split())
#graph[a].append(b) # 양방향 그래프인 경우
graph[b].append(a)
total_info = []
def bfs(start) :
q = deque([start])
visited = [False] * (n+1)
visited[start] = True
cnt = 0
while(q) :
v = q.popleft()
cnt += 1
for _v in graph[v] :
if visited[_v] == False :
q.append(_v)
visited[_v] = True
return cnt
ans = [0 for _ in range(n+1)]
for i in range(1, n+1) :
ans[i] = bfs(i)
for i in range(1, n+1) :
if ans[i] == max(ans) :
print(i, end=' ')

느낀점
- 단방향그래프/양방향 그래프 헷갈림 -> 문제를 잘 이해해야지
- 결과가 뭘 원하는지에 맞춰서 최대한 메모리를 효율적으로
'알고리즘 풀이' 카테고리의 다른 글
| [#1010] 다리놓기 (1) | 2022.11.22 |
|---|---|
| [#1316] 그룹단어 체커 (0) | 2022.11.21 |
| [#2217] 로프 (0) | 2022.11.18 |
| [#20436] ZOAC3 (0) | 2022.11.17 |
| [#16234] 인구이동 (0) | 2022.11.16 |