
π» λ¬Έμ μ μ
μ±μ°κ° νΌλ¦¬λ₯Ό λΆ λλ©΄ μκ³ΌμΌ νμλ€μ μκΈ°λ λͺ¨λ₯΄κ² μ±μ°κ° μ ν΄λμ λ°©ν₯λλ‘ μμ§μ΄κΈ° μμνλ€. μ±μ°κ° μ ν΄λμ λ°©ν₯μ μ΄ 4κ°μ§λ‘ U, D, L, Rμ΄κ³ κ°κ° μ, μλ, μΌμͺ½, μ€λ₯Έμͺ½μΌλ‘ μ΄λνκ² νλ€.
μ΄λ₯Ό μ§μΌλ³΄λ μ¬νμ΄λ λ μ΄μ μμ§μ΄κΈ° νλ€μ΄νλ μκ³ΌμΌ νμλ€μ μ§ν€κΈ° μν΄ νΉμ μ§μ μ ‘SAFE ZONE’ μ΄λΌλ μ΅μ²¨λ¨ λ°©μ μμ€μ λ§λ€μ΄ νμλ€μ΄ μ±μ°μ νΌλ¦¬ μ리λ₯Ό λ£μ§ λͺ»νκ² νλ €κ³ νλ€. νμ§λ§ μμ°μ΄ λλνμ§ μμ μ¬νμ΄λ μ±μ°κ° μ€μ ν΄ λμ λ°©ν₯μ λΆμν΄μ μ΅μ κ°μμ ‘SAFE ZONE’μ λ§λ€λ € νλ€.
μ±μ°κ° μ€μ ν λ°©ν₯ μ§λκ° μ£Όμ΄μ‘μ λ μ¬νμ΄λ₯Ό λμμ μκ³ΌμΌ νμλ€μ΄ μ§λ μ΄λ ꡬμμ μλλΌλ μ±μ°κ° νΌλ¦¬λ₯Ό λΆ λ ‘SAFE ZONE’μ λ€μ΄κ° μ μκ² νλ ‘SAFE ZONE’μ μ΅μ κ°μλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νλ€.

π‘ μ κ·Ό λ° μ€κ³
μ΄λ λ°©ν₯μ΄ μ ν΄μ§ κ·Έλνμμ νμμ μ΄μ΄λκ°λ©° μ¬μ΄ν΄μ΄ λ°μνλμ§ νμΈνλ€.
βοΈ μκ³ λ¦¬μ¦ νμ΄
# μ΄λ μ μ ν¨μ
def move(x, y, dir):
if dir == "U":
return (x-1, y)
elif dir == "D":
return (x+1, y)
elif dir == "L":
return (x, y-1)
elif dir == "R":
return (x, y+1)
def dfs(x, y, group):
visited[x][y] = group
nx, ny = move(x, y, graph[x][y])
# μ΄λ ν μμ§ μ΄λ κ·Έλ£Ήλ μλλ€(= λ°©λ¬Ένμ§ μμλ€.)
if visited[nx][ny] == -1:
return dfs(nx, ny, group)
# μ΄λ νμ κ·Έλ£Ήκ³Ό νμ¬μ κ·Έλ£Ήμ΄ κ°λ€. (= μ¬μ΄ν΄ λ°μ)
if visited[nx][ny] == group:
return 1
# μ¬μ΄ν΄ λ°μ X
return 0
κ·Έλ£Ή λλ²λ₯Ό ν΅ν΄ μ¬μ΄ν΄μ νλ³νλ€. λ°©λ¬Ένμ§ μμ μ λ€μ ν΅ν΄ νμμ μ΄μ΄λκ°λ©΄μ μ²μ νμμ μμν μ μ λ§λ¬μ λ(μ¦, κ·Έλ£Ή λλ²κ° κ°μ μ μ λ§λ¬μ λ) μ¬μ΄ν΄μ΄ λ°μν¨μ μ μ μλ€. λ°λΌμ Safe Zoneμ μ€μΉν μ μλ€.
ποΈ μ΅μ’ μ μΆ μ½λ (Python3 μ μΆ)
# 16724 νΌλ¦¬ λΆλ μ¬λμ΄
# μ΄λ μ μ ν¨μ
def move(x, y, dir):
if dir == "U":
return (x-1, y)
elif dir == "D":
return (x+1, y)
elif dir == "L":
return (x, y-1)
elif dir == "R":
return (x, y+1)
def dfs(x, y, group):
visited[x][y] = group
nx, ny = move(x, y, graph[x][y])
# μ΄λ ν μμ§ μ΄λ κ·Έλ£Ήλ μλλ€(= λ°©λ¬Ένμ§ μμλ€.)
if visited[nx][ny] == -1:
return dfs(nx, ny, group)
# μ΄λ νμ κ·Έλ£Ήκ³Ό νμ¬μ κ·Έλ£Ήμ΄ κ°λ€. (= μ¬μ΄ν΄ λ°μ)
if visited[nx][ny] == group:
return 1
# μ¬μ΄ν΄ λ°μ X
return 0
N, M = map(int, input().split())
graph = [list(input()) for _ in range(N)]
visited = [[-1] * M for _ in range(N)] # λ°©λ¬Έμ 보(κ·Έλ£Ή λλ²) μ μ₯
ans = 0 # μ λ΅
group = 0 # κ·Έλ£Ή λλ² 0, 1, 2, ...
for x in range(N):
for y in range(M):
if visited[x][y] == -1:
ans += dfs(x, y, group) # νμμ ν΅ν΄ κ°μ κ·Έλ£Ή νλ³, ν΄λΉ κ·Έλ£Ήμ safe zone 1κ° λκΈ°
group += 1 # λ€μ κ·Έλ£Ή
print(ans)
π μ€λμ νκ³
-
'Coding-Test > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [Python] 1766 λ¬Έμ μ§ (0) | 2026.03.26 |
|---|---|
| [Python] 2342 Dance Dance Revolution (0) | 2026.03.20 |
| [Python] 11049 νλ ¬ κ³±μ μμ (0) | 2026.03.20 |
| [Python] 16947 μμΈ μ§νμ² 2νΈμ (0) | 2026.03.19 |
| [Python] 2613 μ«μκ΅¬μ¬ (0) | 2026.03.18 |