2022. 7. 8. 00:03ใ๐ฑ Algorithm/Back tracking
https://www.acmicpc.net/problem/1987
1987๋ฒ: ์ํ๋ฒณ
์ธ๋ก R์นธ, ๊ฐ๋ก C์นธ์ผ๋ก ๋ ํ ๋ชจ์์ ๋ณด๋๊ฐ ์๋ค. ๋ณด๋์ ๊ฐ ์นธ์๋ ๋๋ฌธ์ ์ํ๋ฒณ์ด ํ๋์ฉ ์ ํ ์๊ณ , ์ข์ธก ์๋จ ์นธ (1ํ 1์ด) ์๋ ๋ง์ด ๋์ฌ ์๋ค. ๋ง์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ๋ค ์นธ ์ค์ ํ ์นธ์ผ
www.acmicpc.net
์ ๊ทผ
์ฒ์์ queue ๋ฅผ ์ฌ์ฉํด bfs ๋ก ์ ๊ทผํ์ง๋ง, ์ด ๋ฌธ์ ๋ dfs ๋ก๋ง ํ ์ ์๋ค.
ํ๋์์ BFS ์ ๊ทผ์ ๋ํ๋ด๊ณ , ๋ถํ์์ DFS ์์ ์ ๊ทผ์ ๋ํ๋ธ๋ค.
๋ฌธ์ ์์ ๊ตฌํ๊ณ ์ ํ๋ ๊ฒ์ ์ต๋ํ ์ผ๋ง๋งํผ ๋ป์ด๋๊ฐ ์ ์๋์ง๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๊ธฐ์, ๋ถํ์์ DFS ์์ผ๋ก ์ ๊ทผํด์ผ ๋ต์ ๊ตฌํ ์ ์๋ค.
์ฝ๋
r, c = map(int, input().split())
maps = []
for _ in range(r):
maps.append(list(input()))
ans = 0
alphas = set()
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def dfs(x, y, count):
global ans
ans = max(ans, count)
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < r and 0 <= ny < c and not maps[nx][ny] in alphas:
alphas.add(maps[nx][ny])
dfs(nx, ny, count+1)
alphas.remove(maps[nx][ny])
alphas.add(maps[0][0])
dfs(0, 0, 1)
print(ans)
alphas ๋ผ๋ set ์ ๋ฐฉ๋ฌธํ ๋ ธ๋์ ์ํ๋ฒณ์ ๋ด๋๋ค. ๋ฆฌ์คํธ๋ก ๋ด์๋ ๋๊ฒ ์ง๋ง, ์ด์ฐจํผ ์ค๋ณต๋๋ ์์๋ ํ์์๊ธฐ์ set ์ผ๋ก ์ ์ธํ๋ค.
๋ ธ๋(ny, nx) ๊ฐ if ๋ถ๊ธฐ๋ฌธ์ ํด๋น๋๋ค๋ ์๋ฏธ๋, ์๋กญ๊ฒ ๋ ธ๋๋ฅผ ๋ป์ด๋๊ฐ ์ ์๋ค๋ ๋ป์ด๊ธฐ์ count ์ ๊ฐ์ + 1 ํ์ฌ ์ฌ๊ทํธ์ถํ๋ค.
dfs() ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ํด๋น ๋ ธ๋(ny, nx) ๋ฅผ set ์์ ๋นผ์ค์ผํ๋ค.
'๐ฑ Algorithm > Back tracking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 1174 ์ค์ด๋๋ ์ ํ์ด์ฌ (0) | 2022.12.26 |
---|