From 357ea63a21ff2dcb2374427551b9734ac075e877 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EC=9E=A5=ED=98=9C=EC=9B=90?=
<127714800+janghw0126@users.noreply.github.com>
Date: Tue, 26 Mar 2024 10:21:47 +0900
Subject: [PATCH] 2024-03-26
---
janghw0126/README.md | 1 +
...0 \354\240\244\353\213\244\354\247\200.py" | 44 +++++++++++++++++++
2 files changed, 45 insertions(+)
create mode 100644 "janghw0126/\353\213\244\354\235\265\354\212\244\355\212\270\353\235\274/\353\205\271\354\203\211 \354\230\267 \354\236\205\354\235\200 \354\225\240\352\260\200 \354\240\244\353\213\244\354\247\200.py"
diff --git a/janghw0126/README.md b/janghw0126/README.md
index 6c78a1f3..e42dffb3 100644
--- a/janghw0126/README.md
+++ b/janghw0126/README.md
@@ -26,4 +26,5 @@
| 22차시 | 2024.3.8 | 분할 정복 | 종이의 개수 |[#91](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/91) |
| 23차시 | 2024.3.13 | 백트래킹 | 로또 |[#97](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/97) |
| 24차시 | 2024.3.15 | 누적합 | 출석체크 |[#101](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/101) |
+| 25차시 | 2024.3.26 | 녹색 옷 입은 애가 젤다지? | 출석체크 |[#108](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/108) |
---
diff --git "a/janghw0126/\353\213\244\354\235\265\354\212\244\355\212\270\353\235\274/\353\205\271\354\203\211 \354\230\267 \354\236\205\354\235\200 \354\225\240\352\260\200 \354\240\244\353\213\244\354\247\200.py" "b/janghw0126/\353\213\244\354\235\265\354\212\244\355\212\270\353\235\274/\353\205\271\354\203\211 \354\230\267 \354\236\205\354\235\200 \354\225\240\352\260\200 \354\240\244\353\213\244\354\247\200.py"
new file mode 100644
index 00000000..aaae2278
--- /dev/null
+++ "b/janghw0126/\353\213\244\354\235\265\354\212\244\355\212\270\353\235\274/\353\205\271\354\203\211 \354\230\267 \354\236\205\354\235\200 \354\225\240\352\260\200 \354\240\244\353\213\244\354\247\200.py"
@@ -0,0 +1,44 @@
+# 양방향 큐 모듈을 불러온다.
+from collections import deque
+# 문제 번호를 세기 위한 count와, 상하좌우 이동을 위한 dx, dy 배열을 정의한다.
+count, dx, dy = 0, [0, 0, 1, -1], [1, -1, 0, 0]
+
+# 너비 우선 탐색(BFS) 함수를 정의한다.
+def bfs():
+ queue = deque()
+ # 시작점을 queue에 추가한다.
+ queue.append([0, 0])
+ # 시작점의 비용을 초기화한다.
+ cost[0][0] = field[0][0]
+ # queue에 요소가 있는 동안 반복한다.
+ while queue:
+ # queue에서 요소를 하나 꺼내 x, y에 할당한다.
+ x, y = queue.popleft()
+ # 상하좌우 네 방향에 대해 반복한다.
+ for i in range(4):
+ # 현재 위치에서 이동할 새로운 위치를 계산한다.
+ nx, ny = x + dx[i], y + dy[i]
+ # 새로운 위치가 범위 내에 있는지 확인한다.
+ if -1 < nx < n and -1 < ny < n:
+ # 새로운 위치로 이동하는 비용이 더 저렴한지 확인하고 더 저렴한 경우 비용을 갱신한 후 갱신된 위치를 queue에 추가한다.
+ if cost[y][x] + field[ny][nx] < cost[ny][nx]:
+ cost[ny][nx] = cost[y][x] + field[ny][nx]
+ queue.append([nx, ny])
+ # 목적지까지의 최소 비용을 반환한다.
+ return cost[n-1][n-1]
+
+
+while True:
+ n = int(input())
+ if n == 0:
+ break
+ # 문제 번호를 1 증가시킨다.
+ count += 1
+ # 지도 정보를 저장할 리스트를 초기화한다.
+ field = []
+ # 지도 정보를 입력받아 field에 저장한다.
+ for i in range(n): field.append(list(map(int, input().split())))
+ # 각 위치까지의 최소 비용을 저장할 리스트를 무한대로 초기화한다.
+ cost = [[1e9 for j in range(n)] for i in range(n)]
+ # 각 테스트 케이스의 결과를 출력한다.
+ print(f"Problem {count}: {bfs()}")