[python] λ°±μ€ - 3055. νμΆ
π€λ¬Έμ ν΄κ²°
-
G5 | BFS, κ·Έλν?
λ¨μν μ΅λ¨κ±°λ¦¬λ₯Ό μ°Ύλ κ²κ³Ό λ¬λ¦¬ λ§΅μ΄ κ³μ λ³νλ λ¬Έμ μ΄λ€.
λ‘μ§μ κ°λ¨νλ€.
- κ³ μ΄λμΉλ₯Ό μνμ’μ°λ‘ μ΄λμν¨λ€.
- λ¬Όλ μνμ’μ°λ‘ νλ¬λμΉλ€.
- λ€μ κ³ μ΄λμΉλ₯Ό μνμ’μ°λ‘ μ΄λμν¨λ€. (νμ§λ§ λ¬Όμ μ 겨μλ κ³ μ΄λμΉλ μ΄λν μ μλ€)
- λ€μ λ¬Όμ μνμ’μ°λ‘ νλ¬λμΉκ²νλ€.
- μμ κ³Όμ μ λ°λ³΅νλ©΄μ κ³ μ΄λμΉκ° κ΅΄μ λμ°©νλ©΄ λ
π¨
π»μμ€ μ½λ
def flood(w):
new_water = []
for x, y in w:
for k in range(len(dx)):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < R and 0 <= ny < C:
if forest[nx][ny] == '.' or type(forest[nx][ny]) == int:
forest[nx][ny] = '*'
new_water.append((nx, ny))
return new_water
def move_hedgehog(h):
new_hedgehog = []
for x, y in h:
if forest[x][y] != '*':
for k in range(len(dx)):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < R and 0 <= ny < C:
if forest[nx][ny] == 'D':
forest[nx][ny] = forest[x][y] + 1
return 'finish'
if forest[nx][ny] == '.':
forest[nx][ny] = forest[x][y] + 1
new_hedgehog.append((nx, ny))
return new_hedgehog
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
if __name__ == '__main__':
R, C = map(int, input().split())
forest = [list(input()) for _ in range(R)]
water = []
hedgehog = []
cave = []
for i in range(R):
for j in range(C):
if forest[i][j] == '*':
water.append((i, j))
elif forest[i][j] == 'S':
forest[i][j] = 0
hedgehog.append((i, j))
elif forest[i][j] == 'D':
cave = [i, j]
while hedgehog:
hedgehog = move_hedgehog(hedgehog)
if hedgehog == 'finish':
print(forest[cave[0]][cave[1]])
break
water = flood(water)
else:
print('KAKTUS')
πλ¬Έμ νμΈ
μΆμ²: BACKJOON ONLINE JUDGE
λ§ν¬: https://www.acmicpc.net/problem/3055
3055λ²: νμΆ
μ¬μ ν μνμ κ΅°μ£Ό μ΄λ―Όνμ λλμ΄ λ§λ² ꡬμ¬μ μμ λ£μκ³ , κ·Έ λ₯λ ₯μ μ€νν΄λ³΄κΈ° μν΄ κ·Όμ²μ ν°λ±μ²μ νμλ₯Ό μΌμΌν€λ €κ³ νλ€. μ΄ μ²μλ κ³ μ΄λμΉκ° ν λ§λ¦¬ μ΄κ³ μλ€. κ³ μ΄λμΉλ μ οΏ½οΏ½
www.acmicpc.net
λ¬Έμ
μ¬μ ν μνμ κ΅°μ£Ό μ΄λ―Όνμ λλμ΄ λ§λ² ꡬμ¬μ μμ λ£μκ³ , κ·Έ λ₯λ ₯μ μ€νν΄λ³΄κΈ° μν΄ κ·Όμ²μ ν°λ±μ²μ νμλ₯Ό μΌμΌν€λ €κ³ νλ€. μ΄ μ²μλ κ³ μ΄λμΉκ° ν λ§λ¦¬ μ΄κ³ μλ€. κ³ μ΄λμΉλ μ μΌ μΉν μΉκ΅¬μΈ λΉλ²μ κ΅΄λ‘ κ°λ₯ν 빨리 λλ§κ° νμλ₯Ό νΌνλ €κ³ νλ€.
ν°λ±μ²μ μ§λλ Rν Cμ΄λ‘ μ΄λ£¨μ΄μ Έ μλ€. λΉμ΄μλ κ³³μ '.'λ‘ νμλμ΄ μκ³ , λ¬Όμ΄ μ°¨μλ μ§μμ '*', λμ 'X'λ‘ νμλμ΄ μλ€. λΉλ²μ κ΅΄μ 'D'λ‘, κ³ μ΄λμΉμ μμΉλ 'S'λ‘ λνλ΄μ΄μ Έ μλ€.
맀 λΆλ§λ€ κ³ μ΄λμΉλ νμ¬ μλ μΉΈκ³Ό μΈμ ν λ€ μΉΈ μ€ νλλ‘ μ΄λν μ μλ€. (μ, μλ, μ€λ₯Έμͺ½, μΌμͺ½) λ¬Όλ 맀 λΆλ§λ€ λΉμ΄μλ μΉΈμΌλ‘ νμ₯νλ€. λ¬Όμ΄ μλ μΉΈκ³Ό μΈμ ν΄μλ λΉμ΄μλ μΉΈ(μ μ΄λ ν λ³μ 곡μ )μ λ¬Όμ΄ μ°¨κ² λλ€. λ¬Όκ³Ό κ³ μ΄λμΉλ λμ ν΅κ³Όν μ μλ€. λ, κ³ μ΄λμΉλ λ¬Όλ‘ μ°¨μλ ꡬμμΌλ‘ μ΄λν μ μκ³ , λ¬Όλ λΉλ²μ μκ΅΄λ‘ μ΄λν μ μλ€.
ν°λ±μ²μ μ§λκ° μ£Όμ΄μ‘μ λ, κ³ μ΄λμΉκ° μμ νκ² λΉλ²μ κ΅΄λ‘ μ΄λνκΈ° μν΄ νμν μ΅μ μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
κ³ μ΄λμΉλ λ¬Όμ΄ μ°° μμ μΈ μΉΈμΌλ‘ μ΄λν μ μλ€. μ¦, λ€μ μκ°μ λ¬Όμ΄ μ°° μμ μΈ μΉΈμΌλ‘ κ³ μ΄λμΉλ μ΄λν μ μλ€. μ΄λν μ μμΌλ©΄ κ³ μ΄λμΉκ° λ¬Όμ λΉ μ§κΈ° λλ¬Έμ΄λ€.
μ λ ₯
첫째 μ€μ 50λ³΄λ€ μκ±°λ κ°μ μμ°μ Rκ³Ό Cκ° μ£Όμ΄μ§λ€.
λ€μ Rκ° μ€μλ ν°λ±μ²μ μ§λκ° μ£Όμ΄μ§λ©°, λ¬Έμ μμ μ€λͺ ν λ¬Έμλ§ μ£Όμ΄μ§λ€. 'D'μ 'S'λ νλμ©λ§ μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ κ³ μ΄λμΉκ° λΉλ²μ κ΅΄λ‘ μ΄λν μ μλ κ°μ₯ λΉ λ₯Έ μκ°μ μΆλ ₯νλ€. λ§μ½, μμ νκ² λΉλ²μ κ΅΄λ‘ μ΄λν μ μλ€λ©΄, "KAKTUS"λ₯Ό μΆλ ₯νλ€.