๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] 2589๋ฒˆ_๋ณด๋ฌผ ํƒ์ƒ‰

Dbswnstjd 2022. 12. 14. 22:35

๋ฌธ์ œ

https://www.acmicpc.net/problem/2589

 

2589๋ฒˆ: ๋ณด๋ฌผ์„ฌ

๋ณด๋ฌผ์„ฌ ์ง€๋„๋ฅผ ๋ฐœ๊ฒฌํ•œ ํ›„ํฌ ์„ ์žฅ์€ ๋ณด๋ฌผ์„ ์ฐพ์•„๋‚˜์„ฐ๋‹ค. ๋ณด๋ฌผ์„ฌ ์ง€๋„๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์ด๋ฉฐ ์—ฌ๋Ÿฌ ์นธ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ์นธ์€ ์œก์ง€(L)๋‚˜ ๋ฐ”๋‹ค(W)๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค. ์ด ์ง€๋„์—์„œ

www.acmicpc.net

ํ’€์ด

Python3 ์—์„œ ์‚ฌ์šฉํ•œ ํ’€์ด

# ๋ฐฑ์ค€ 2589๋ฒˆ ๋ฌธ์ œ -๋ณด๋ฌผ ํƒ์ƒ‰
from collections import deque
n, m = map(int, input().split())
dx, dy = [0,0,-1,1], [1,-1,0,0]
graph = [list(map(str, input())) for _ in range(n)]
def bfs(x,y):
    q = deque()
    q.append((x, y))
    cnt = 0
    visited = [[0]*m for _ in range(n)]
    visited[x][y] = 1
    while q:
        x, y = q.popleft()

        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < n and 0 <= ny < m and not visited[nx][ny] and graph[nx][ny] == 'L':
                visited[nx][ny] = visited[x][y] + 1
                cnt = max(cnt, visited[nx][ny])
                q.append((nx, ny))
    return cnt - 1
result = 0
for i in range(n):
    for j in range(m):
        if graph[i][j] == 'L':
            # ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ์•„๋‹˜
            if i>0 and i+1<n:
                if graph[i-1][j] == "L" and graph[i+1][j] == "L":
                    continue
            if j>0 and j+1<m:
                if graph[i][j-1] == "L" and graph[i][j+1] == "L":
                    continue
            result = max(result, bfs(i,j))
print(result)

์ด ํ’€์ด๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น๊ณผ BFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์ฃผ์—ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์„œ pypy3์—์„œ๋งŒ ํ†ต๊ณผ๊ฐ€ ๋˜์—ˆ๋‹ค.

L์„ ํƒ์ƒ‰ํ•  ๋•Œ ๊ฐ€์žฅ์ž๋ฆฌ ์ธ์ง€ ํ™•์ธํ•ด์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ ํ•˜์˜€๋Š”๋ฐ 300ms ์ฐจ์ด๊ฐ€ ๋‚ฌ๋‹ค. 

# ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ์•„๋‹˜
            if i>0 and i+1<n:
                if graph[i-1][j] == "L" and graph[i+1][j] == "L":
                    continue
            if j>0 and j+1<m:
                if graph[i][j-1] == "L" and graph[i][j+1] == "L":
                    continue

์ด๋Ÿฌํ•œ ์„ธ์„ธํ•œ ๋ถ€๋ถ„๋“ค์„ ์ž˜ ํŒŒ์•…ํ•ด์•ผ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์ž˜ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.