Skip to content

6회차 #11

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Apr 14, 2023
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
7 changes: 4 additions & 3 deletions 05--search/han/baekjoon/13023.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ def dfs(index, depth):
for i in tree[index]:
if visited[i] == 0:
dfs(i, depth + 1)
visited[index] = 0
visited[index] = 0 # 이 부분이 핵심. 끝까지 파고 들어가서 만약에


def solve():
for _ in range(M):
a, b = map(int, input().split())
tree[a].append(b)
tree[a].append(b) # 양방향 설정
tree[b].append(a)

depth = 1
Expand All @@ -46,7 +46,8 @@ def solve():

# 문제 이해
# 특정 조건에 트리가 매칭되는 지 확인?
# dfs를 이용하는 것 같긴 한데, 어떤 의미인지 모르겠음 왜 예저 2가 통과하는거지? 0 -> 3 -> 2 -> 1 -> 4
# dfs를 이용하는 것 같긴 한데, 어떤 의미인지 모르겠음
# 왜 예제 2가 통과하는거지? 0 -> 3 -> 2 -> 1 -> 4 아마 이 경우
# 양쪽으로 연결되어있고 그리고 visited[index] = 0 이 핵심인듯

# 제한 조건
Expand Down
1 change: 0 additions & 1 deletion 08--graph/empty.txt

This file was deleted.

68 changes: 68 additions & 0 deletions 08--graph/han/baekjoon/1167.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
from collections import deque
import sys

input = sys.stdin.readline


def bfs(v, visited, A, distance):
q = deque()
q.append(v)
visited[v] = True

while q:
node = q.popleft()
for e, v in A[node]:
if not visited[e]:
visited[e] = True
q.append(e)
distance[e] = distance[node] + v


def solve():
N = int(input())
A = [[] for _ in range(N + 1)]
distance = [0] * (N + 1)
visited = [False] * (N + 1)

for _ in range(N):
# 1 3 2 -1
d = list(map(int, input().split()))
i = 0
S = d[i] # 1, i = 0
i += 1 # i = 1
while True:
E = d[i] # 3, i = 1
if E == -1:
# 제약조건 -1이면 연결된 노드가 없다는 뜻. 더 이상 연결노드 추가하지 않아도됨.
break
V = d[i + 1] # 2, i = 1
A[S].append((E, V)) # tuple 형태로 연결된 노드 추가
i += 2 # i = 3

bfs(1, visited, A, distance)

temp = 1

for i in range(2, N + 1):
if distance[temp] < distance[i]:
temp = i

distance = [0] * (N + 1)
visited = [False] * (N + 1)
bfs(temp, visited, A, distance)
distance.sort()
print(distance[N])


if __name__ == '__main__':
solve()

# 문제 이해
# 입력 312 -> 3 노드 - 2 - 1 노드
# 노드는 튜플로 선언 왜? 어떤 노드가 얼마나 거리가 먼 엣지와 연결되어있는지 알기 위해선
# 최대 거리를 측정할 배열과, 방문을 확인할 배열이 필요할듯.
# 어렵다, 더 이상 어떻게 풀어나가야할지 모르겠음. -> 답안 확인

# 제약사항
# 노드 갯수는 2 이상
# 입력된 수중에 -1이면 연결된 노드가 없다는 뜻.
51 changes: 51 additions & 0 deletions 08--graph/han/baekjoon/18352.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
from collections import deque
import sys

input = sys.stdin.readline

def bfs(v, visited, A):
q = deque()
q.append(v)
visited[v] += 1

while q:
node = q.popleft()
for i in A[node]:
if visited[i] == -1:
visited[i] = visited[node] + 1
q.append(i)

def solve():
N, M, K, X = map(int, input().split())
A = [[] for _ in range(N + 1)] # 도시의 연결을 나타내기 위한 배열, 도시는 1부터 시작하니 크기는 N + 1 만큼
result = []
visited = [-1] * (N + 1) # 방문 했는 지 확인

for _ in range(M):
S, E = map(int, input().split())
A[S].append(E)

# X 출발 도시 번호
bfs(X, visited, A)

for i in range(N + 1):
if visited[i] == K:
result.append(i)

if not result:
print(-1)
else:
result.sort()
for i in result:
print(i)


if __name__ == '__main__':
solve()

# 문제 이해
# 단방향으로만 이동할 수 있음.
# 최단거리 문제, K가 주어짐. 정확히 K랑 같은 거리인 노드만 찾으면 됨.
# 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X
# BFS이용하면 될 것 같은데.. 잘 안됨 -> 답안 참고

7 changes: 7 additions & 0 deletions 08--graph/han/baekjoon/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# 정리
- 반복이 필요하다. 유형에 익숙해져야할듯.


## 다시 풀기
- [ ] <https://www.acmicpc.net/problem/18352>
- [ ] <https://www.acmicpc.net/problem/1167>