๋ฐฑ์ค€ 1987 ์•ŒํŒŒ๋ฒณ ํŒŒ์ด์ฌ

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