๐ค๋ฌธ์ ํด๊ฒฐ
-
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
๋ฌธ์
์ฌ์ ํ ์ํ์ ๊ตฐ์ฃผ ์ด๋ฏผํ์ ๋๋์ด ๋ง๋ฒ ๊ตฌ์ฌ์ ์์ ๋ฃ์๊ณ , ๊ทธ ๋ฅ๋ ฅ์ ์คํํด๋ณด๊ธฐ ์ํด ๊ทผ์ฒ์ ํฐ๋ฑ์ฒ์ ํ์๋ฅผ ์ผ์ผํค๋ ค๊ณ ํ๋ค. ์ด ์ฒ์๋ ๊ณ ์ด๋์น๊ฐ ํ ๋ง๋ฆฌ ์ด๊ณ ์๋ค. ๊ณ ์ด๋์น๋ ์ ์ผ ์นํ ์น๊ตฌ์ธ ๋น๋ฒ์ ๊ตด๋ก ๊ฐ๋ฅํ ๋นจ๋ฆฌ ๋๋ง๊ฐ ํ์๋ฅผ ํผํ๋ ค๊ณ ํ๋ค.
ํฐ๋ฑ์ฒ์ ์ง๋๋ Rํ C์ด๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋น์ด์๋ ๊ณณ์ '.'๋ก ํ์๋์ด ์๊ณ , ๋ฌผ์ด ์ฐจ์๋ ์ง์ญ์ '*', ๋์ 'X'๋ก ํ์๋์ด ์๋ค. ๋น๋ฒ์ ๊ตด์ 'D'๋ก, ๊ณ ์ด๋์น์ ์์น๋ 'S'๋ก ๋ํ๋ด์ด์ ธ ์๋ค.
๋งค ๋ถ๋ง๋ค ๊ณ ์ด๋์น๋ ํ์ฌ ์๋ ์นธ๊ณผ ์ธ์ ํ ๋ค ์นธ ์ค ํ๋๋ก ์ด๋ํ ์ ์๋ค. (์, ์๋, ์ค๋ฅธ์ชฝ, ์ผ์ชฝ) ๋ฌผ๋ ๋งค ๋ถ๋ง๋ค ๋น์ด์๋ ์นธ์ผ๋ก ํ์ฅํ๋ค. ๋ฌผ์ด ์๋ ์นธ๊ณผ ์ธ์ ํด์๋ ๋น์ด์๋ ์นธ(์ ์ด๋ ํ ๋ณ์ ๊ณต์ )์ ๋ฌผ์ด ์ฐจ๊ฒ ๋๋ค. ๋ฌผ๊ณผ ๊ณ ์ด๋์น๋ ๋์ ํต๊ณผํ ์ ์๋ค. ๋, ๊ณ ์ด๋์น๋ ๋ฌผ๋ก ์ฐจ์๋ ๊ตฌ์ญ์ผ๋ก ์ด๋ํ ์ ์๊ณ , ๋ฌผ๋ ๋น๋ฒ์ ์๊ตด๋ก ์ด๋ํ ์ ์๋ค.
ํฐ๋ฑ์ฒ์ ์ง๋๊ฐ ์ฃผ์ด์ก์ ๋, ๊ณ ์ด๋์น๊ฐ ์์ ํ๊ฒ ๋น๋ฒ์ ๊ตด๋ก ์ด๋ํ๊ธฐ ์ํด ํ์ํ ์ต์ ์๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๊ณ ์ด๋์น๋ ๋ฌผ์ด ์ฐฐ ์์ ์ธ ์นธ์ผ๋ก ์ด๋ํ ์ ์๋ค. ์ฆ, ๋ค์ ์๊ฐ์ ๋ฌผ์ด ์ฐฐ ์์ ์ธ ์นธ์ผ๋ก ๊ณ ์ด๋์น๋ ์ด๋ํ ์ ์๋ค. ์ด๋ํ ์ ์์ผ๋ฉด ๊ณ ์ด๋์น๊ฐ ๋ฌผ์ ๋น ์ง๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์ R๊ณผ C๊ฐ ์ฃผ์ด์ง๋ค.
๋ค์ R๊ฐ ์ค์๋ ํฐ๋ฑ์ฒ์ ์ง๋๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๋ฌธ์ ์์ ์ค๋ช ํ ๋ฌธ์๋ง ์ฃผ์ด์ง๋ค. 'D'์ 'S'๋ ํ๋์ฉ๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ณ ์ด๋์น๊ฐ ๋น๋ฒ์ ๊ตด๋ก ์ด๋ํ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ์์ ํ๊ฒ ๋น๋ฒ์ ๊ตด๋ก ์ด๋ํ ์ ์๋ค๋ฉด, "KAKTUS"๋ฅผ ์ถ๋ ฅํ๋ค.
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ํ๋ก๊ทธ๋๋จธ์ค - ํ์ ํฐํธ๋ฆฌ๊ธฐ(์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง ์์ฆ1) (0) | 2020.09.25 |
---|---|
[python] ๋ฐฑ์ค - 5014. ์คํํธ๋งํฌ (0) | 2020.09.24 |
[python] ๋ฐฑ์ค - 1916. ์ต์๋น์ฉ ๊ตฌํ๊ธฐ (0) | 2020.09.23 |
[python] ๋ฐฑ์ค - 2225. ํฉ๋ถํด (0) | 2020.09.22 |
[python] ๋ฐฑ์ค - 9251. LCS (0) | 2020.09.22 |