Skip to content

Commit d974637

Browse files
authored
Merge pull request #107 from zaqquum/main
week4 ๊ณผ์ œ ์ž๋ฃŒ ์—…๋ฐ์ดํŠธ
2 parents 524ec79 + baefc8a commit d974637

File tree

4 files changed

+151
-0
lines changed

4 files changed

+151
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
'''
2+
BOJ #13460. ๊ตฌ์Šฌ ํƒˆ์ถœ2 (๊ณจ๋“œ2)
3+
https://www.acmicpc.net/problem/13460
4+
์œ ํ˜•: BFS
5+
์ถœ์ฒ˜ : https://hstory0208.tistory.com/entry/Python%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B0%B1%EC%A4%80-13460-%EA%B5%AC%EC%8A%AC-%ED%83%88%EC%B6%9C2
6+
'''
7+
8+
from collections import deque
9+
import sys
10+
input = sys.stdin.readline
11+
12+
n, m = map(int, input().split()) # ํ–‰, ์—ด
13+
14+
board = [list(input().rstrip()) for _ in range(n)]
15+
visited = []
16+
17+
dx = [1, -1, 0, 0]
18+
dy = [0, 0, -1, 1]
19+
cnt = 0
20+
21+
def getPos():
22+
rx, ry, bx, by = 0, 0, 0, 0
23+
for x in range(n):
24+
for y in range(m):
25+
if board[x][y] == "R":
26+
rx, ry = x, y
27+
if board[x][y] == "B":
28+
bx, by = x, y
29+
return rx, ry, bx, by
30+
31+
32+
def move(x, y, dx, dy):
33+
cnt = 0
34+
# ์ด๋™ํ•˜๋Š” ์œ„์น˜๊ฐ€ ๋ฒฝ์ด์•„๋‹ˆ๊ณ , ๊ตฌ๋ฉ์— ๋“ค์–ด๊ฐ€์ง€ ์•Š์„ ๋™์•ˆ ๋ฐ˜๋ณต
35+
while board[x + dx][y + dy] != "#" and board[x][y] != "O":
36+
x += dx
37+
y += dy
38+
cnt +=1
39+
return x, y, cnt
40+
41+
def bfs():
42+
rx, ry, bx, by = getPos()
43+
44+
q = deque()
45+
q.append((rx, ry, bx, by, 1))
46+
visited.append((rx, ry, bx, by))
47+
48+
while q:
49+
rx, ry, bx, by, result = q.popleft()
50+
51+
if result > 10:
52+
break
53+
54+
for i in range(4):
55+
nrx, nry, rcnt = move(rx, ry, dx[i], dy[i])
56+
nbx, nby, bcnt = move(bx, by, dx[i], dy[i])
57+
58+
# ํŒŒ๋ž€ ๊ตฌ์Šฌ์ด ๊ตฌ๋ฉ์— ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ
59+
if board[nbx][nby] == "O":
60+
continue
61+
62+
# ๋นจ๊ฐ„ ๊ตฌ์Šฌ์ด ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ ์„ฑ๊ณต
63+
if board[nrx][nry] == "O":
64+
print(result)
65+
return
66+
67+
# ๋‘˜์ด ๊ฒน์ณ์žˆ์„๊ฒฝ์šฐ ๋” ๋งŽ์ด ์ด๋™ํ•œ๋…€์„์„ 1์นธ ๋’ค๋กœ ๋ณด๋‚ธ๋‹ค.
68+
if nrx == nbx and nry == nby:
69+
if rcnt > bcnt:
70+
nrx -= dx[i]
71+
nry -= dy[i]
72+
else:
73+
nbx -= dx[i]
74+
nby -= dy[i]
75+
76+
# ํƒ์ƒ‰ํ•˜์ง€ ์•Š์€ ๋ฐฉํ–ฅ ํƒ์ƒ‰
77+
if (nrx, nry, nbx, nby) not in visited:
78+
visited.append((nrx, nry, nbx, nby))
79+
q.append((nrx, nry, nbx, nby, result + 1))
80+
print(-1)
81+
82+
bfs()
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
## ๐Ÿš€ 12์›” 3์ฃผ์ฐจ (12/21) ์Šคํ„ฐ๋”” ๋ฐœ์ œ ์ฃผ์ œ: BFS
2+
> ๋ฐœ์ œ์ž: ๊น€ํ™์ฃผ
3+
4+
### ๐Ÿ—‚๏ธ ์Šคํ„ฐ๋”” ์ž๋ฃŒ
5+
- PDF: ๋ฐ”๋กœ๊ฐ€๊ธฐ
6+
- ![image](https://github.com/user-attachments/assets/64d7c010-7a67-4049-b89c-435fb767d25a)
7+
8+
9+
### ๐Ÿ“– ๋ฌธ์ œ
10+
- [๋ฐฑ์ค€ #2206. ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ](https://www.acmicpc.net/problem/2206): ๊ตฌํ˜„, BFS / ๊ณจ๋“œ3
11+
- ์ •๋‹ต ์ฝ”๋“œ: Study_BOJ_2206_๋ฒฝ๋ถ€์ˆ˜๊ณ ์ด๋™ํ•˜๊ธฐ.py
12+
13+
### ๐Ÿ’ป ๊ณผ์ œ
14+
- [๋ฐฑ์ค€ #13460.๊ตฌ์Šฌํƒˆ์ถœ2](https://www.acmicpc.net/problem/13460): BFS / ๊ณจ๋“œ2
15+
- ์ •๋‹ต ์ฝ”๋“œ: Asssignment_BOJ_13460_๊ตฌ์Šฌํƒˆ์ถœ2.py
242 KB
Binary file not shown.
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
'''
2+
BOJ #2206.๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ (๊ณจ๋“œ3)
3+
https://www.acmicpc.net/problem/2206
4+
์œ ํ˜•: BFS,๊ตฌํ˜„
5+
'''
6+
7+
import sys
8+
from collections import deque
9+
# 1. ์ž…๋ ฅ ๊ทธ๋ž˜ํ”„
10+
N , M = map(int,sys.stdin.readline().split())
11+
graph = []
12+
for n in range(N) :
13+
graph.append(list(map(int, input())))
14+
15+
#๋ฐฉ๋ฌธ ์—ฌ๋ถ€ & ์‹œ์ž‘๋…ธ๋“œ๋กœ ๋ถ€ํ„ฐ ์ตœ๋‹จ ๊ฒฝ๋กœ ๊ฑฐ๋ฆฌ ,๋ฒฝ ๋ถ€์ˆœ ํšŸ์ˆ˜(3์ฐจ์›)
16+
visited = [[[0]*2 for _ in range(M)] for k in range(N)]
17+
18+
#์ƒํ•˜์ขŒ์šฐ -> ์ธ์ ‘ ๋…ธ๋“œ
19+
dx = [0,0,1,-1]
20+
dy = [1,-1,0,0]
21+
22+
# 2. bfs ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
23+
def bfs():
24+
#์ดˆ๊ธฐ ๋…ธ๋“œ queue ์— ์ถ”๊ฐ€ , ๋ฐฉ๋ฌธ ๋“ฑ๋ก
25+
dq = deque()
26+
dq.append((0,0,0))
27+
visited[0][0][0] = 1
28+
29+
while dq :
30+
x,y,wall = dq.popleft()
31+
# ๋ชฉ์ ์ง€(N,M) ๋„์ฐฉํ•œ ๊ฒฝ์šฐ,์ด๋™ ํšŸ์ˆ˜ ์ถœ๋ ฅ
32+
if x == N-1 and y == M -1 :
33+
return visited[x][y][wall]
34+
35+
for i in range(4):#์ƒํ•˜์ขŒ์šฐ๋กœ ๋‹ค์Œ ์ด๋™ํ•  ์นธ์˜ ์œ„์น˜
36+
xx = x+ dx[i] ; yy = y+ dy[i]
37+
# (1)๋‹ค์Œ ์ด๋™ํ•  ๊ณณ์ด graph ๋ฐ–์— ์žˆ๋Š” ๊ฒฝ์šฐ
38+
if xx<0 or xx>= N or yy <0 or yy>= M:
39+
continue
40+
# (2) ๋‹ค์Œ ์ด๋™ํ•  ๊ณณ์ด ๋ฒฝ์ด๊ณ , ํ•œ๋ฒˆ๋„ ๋ฒฝ ์•ˆ ๋šค์—ˆ์„๋•Œ
41+
if graph[xx][yy] == 1 and wall == 0 : # and not visited[xx][yy][1]
42+
visited[xx][yy][1] = visited[x][y][0]+1
43+
dq.append((xx,yy,1))
44+
45+
#(3)๋‹ค์Œ ์ด๋™ํ•  ๊ณณ์ด ๋ฒฝ์ด ์•„๋‹ˆ๊ณ ,ํ•œ๋ฒˆ๋„ ๋ฐฉ๋ฌธ ํ•˜์ง€ ์•Š์€ ๊ณณ
46+
elif graph[xx][yy] == 0 and visited[xx][yy][wall] == 0 : # ๊ทธ๋ƒฅ ๊ฐ
47+
visited[xx][yy][wall] = visited[x][y][wall] +1
48+
dq.append((xx,yy,wall))
49+
50+
return -1 #BFS ์ข…๋ฃŒ๋ ๋–„ ๊นŒ์ง€ ๋„์ฐฉ์ ์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•˜๋ฉด -1 ์ถœ๋ ฅํ•˜๊ธฐ
51+
52+
print(bfs())
53+
54+

0 commit comments

Comments
ย (0)