Skip to content

Commit 01de8de

Browse files
authored
Merge pull request #37 from YoonYn9915/main
YoonYn9915 / 7월 1주차 / 3문제
2 parents f3be146 + 5c57fef commit 01de8de

File tree

3 files changed

+104
-0
lines changed

3 files changed

+104
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from collections import deque, defaultdict
2+
3+
def bfs(graph, start_node, n, answer):
4+
queue = deque([start_node])
5+
visited = [False] * n
6+
visited[start_node] = True
7+
8+
while queue:
9+
current_node = queue.popleft()
10+
11+
for next_node in graph[current_node]:
12+
if not visited[next_node]:
13+
queue.append(next_node)
14+
visited[next_node] = True
15+
answer[next_node] = current_node
16+
17+
return answer
18+
19+
# 입력값 받기
20+
n = int(input())
21+
edges = [list(map(int, input().split())) for _ in range(n - 1)]
22+
23+
# 그래프 초기화 (인접 리스트 사용)
24+
graph = defaultdict(list)
25+
26+
for edge in edges:
27+
node1, node2 = edge
28+
graph[node1 - 1].append(node2 - 1)
29+
graph[node2 - 1].append(node1 - 1)
30+
31+
# 정답 배열 초기화
32+
answer = [0] * n
33+
34+
# BFS 실행 (0번 노드를 루트로 설정)
35+
answer = bfs(graph, 0, n, answer)
36+
37+
# 결과 출력 (루트 노드를 제외한 노드들의 부모 노드를 출력)
38+
for parent in answer[1:]:
39+
print(parent + 1)
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from collections import deque
2+
3+
4+
def bfs(graph, visited):
5+
dx = [-1, 1, 0, 0]
6+
dy = [0, 0, -1, 1]
7+
8+
queue = deque([(0, 0, 1)]) # (x, y, distance)
9+
visited[0][0] = 1
10+
11+
while queue:
12+
x, y, dist = queue.popleft()
13+
14+
if x == n - 1 and y == m - 1:
15+
return dist
16+
17+
for i in range(4):
18+
row = x + dx[i]
19+
col = y + dy[i]
20+
21+
if 0 <= row < n and 0 <= col < m and visited[row][col] == 0 and graph[row][col] == 1:
22+
visited[row][col] = 1
23+
queue.append((row, col, dist + 1))
24+
25+
return -1 # 목적지에 도달할 수 없는 경우
26+
27+
28+
n, m = map(int, input().split())
29+
graph = []
30+
visited = [[0] * m for _ in range(n)]
31+
32+
for _ in range(n):
33+
line = input()
34+
graph.append([int(char) for char in line])
35+
36+
min_answer = bfs(graph, visited)
37+
38+
print(min_answer)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
n = int(input())
2+
3+
dp = [-1 for _ in range(5001)]
4+
dp[3] = 1
5+
dp[5] = 1
6+
7+
if n <= 5:
8+
print(dp[n])
9+
else:
10+
for i in range(6, n + 1):
11+
a, b = dp[i], dp[i]
12+
13+
if dp[i - 5] != -1:
14+
a = dp[i - 5]
15+
if dp[i - 3] != -1:
16+
b = dp[i - 3]
17+
18+
if a > 0 and b > 0:
19+
dp[i] = min(a + 1, b + 1)
20+
elif a > 0 and b < 0:
21+
dp[i] = a + 1
22+
elif a < 0 and b > 0:
23+
dp[i] = b + 1
24+
else:
25+
dp[i] = -1
26+
27+
print(dp[n])

0 commit comments

Comments
 (0)