๐Ÿ“š Study/Baekjoon

[Gold IV] 1987 - ์•ŒํŒŒ๋ฒณ

์œฐ๊ฐฑ 2025. 4. 14. 13:44

๋ฌธ์ œ

์„ธ๋กœ ์นธ, ๊ฐ€๋กœ ์นธ์œผ๋กœ ๋œ ํ‘œ ๋ชจ์–‘์˜ ๋ณด๋“œ๊ฐ€ ์žˆ๋‹ค. ๋ณด๋“œ์˜ ๊ฐ ์นธ์—๋Š” ๋Œ€๋ฌธ์ž ์•ŒํŒŒ๋ฒณ์ด ํ•˜๋‚˜์”ฉ ์ ํ˜€ ์žˆ๊ณ , ์ขŒ์ธก ์ƒ๋‹จ ์นธ (ํ–‰ ์—ด) ์—๋Š” ๋ง์ด ๋†“์—ฌ ์žˆ๋‹ค.

๋ง์€ ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ ๋„ค ์นธ ์ค‘์˜ ํ•œ ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ƒˆ๋กœ ์ด๋™ํ•œ ์นธ์— ์ ํ˜€ ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์€ ์ง€๊ธˆ๊นŒ์ง€ ์ง€๋‚˜์˜จ ๋ชจ๋“  ์นธ์— ์ ํ˜€ ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ๊ณผ๋Š” ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค. ์ฆ‰, ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์ด ์ ํžŒ ์นธ์„ ๋‘ ๋ฒˆ ์ง€๋‚  ์ˆ˜ ์—†๋‹ค.

์ขŒ์ธก ์ƒ๋‹จ์—์„œ ์‹œ์ž‘ํ•ด์„œ, ๋ง์ด ์ตœ๋Œ€ํ•œ ๋ช‡ ์นธ์„ ์ง€๋‚  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋ง์ด ์ง€๋‚˜๋Š” ์นธ์€ ์ขŒ์ธก ์ƒ๋‹จ์˜ ์นธ๋„ ํฌํ•จ๋œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๊ณผ ๊ฐ€ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. () ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ์„œ ๋ณด๋“œ์— ์ ํ˜€ ์žˆ๋Š” ๊ฐœ์˜ ๋Œ€๋ฌธ์ž ์•ŒํŒŒ๋ฒณ๋“ค์ด ๋นˆ์นธ ์—†์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ง์ด ์ง€๋‚  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์˜ ์นธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

2 4
CAAB
ADCB

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

3

์˜ˆ์ œ ์ž…๋ ฅ 2 ๋ณต์‚ฌ

3 6
HFDFFB
AJHGDH
DGAGEH

์˜ˆ์ œ ์ถœ๋ ฅ 2 ๋ณต์‚ฌ

6

์˜ˆ์ œ ์ž…๋ ฅ 3 ๋ณต์‚ฌ

5 5
IEFCJ
FHFKC
FFALF
HFGCF
HMCHH

์˜ˆ์ œ ์ถœ๋ ฅ 3 ๋ณต์‚ฌ

10

 


# ํ’€์ด ๋ฐฉ๋ฒ•

๊นŠ์ด ๋“ค์–ด๊ฐ€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— dfs

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ ์ค‘ ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑํŠธ๋ž˜ํ‚น ๊ธฐ๋ฒ•์„ ์ ์šฉํ–ˆ๋‹ค. ์ด ๋ถ€๋ถ„์ด ์‚ด์ง ๋ฏธ์ˆ™ํ•จ

์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๊ณ„์† ๋– ์„œ ๋‚œ๊ฐํ–ˆ๋Š”๋ฐ pypy ๋ฒ„์ „์œผ๋กœ ๋Œ๋ฆฌ๋‹ˆ๊นŒ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

์•ž์„  ๋ฌธ์ œ์—์„œ๋„ ๊บ ๋‹ฌ์•˜์ง€๋งŒ cnt๋ฅผ ๊ตฌํ•ด์•ผํ•  ๋•Œ๋Š” ์ธ์ž๋ฅผ ๊ฐ™์ด ๋„˜๊ฒจ์ฃผ๋Š”๊ฒŒ ์ข‹๋‹ค


# ์ฝ”๋“œ

# 2025-04-14 13:20-37
import sys
sys.stdin = open("input.txt","r")

r, c = map(int,sys.stdin.readline().split())
graph = [list(sys.stdin.readline().strip()) for _ in range(r)]

visited = set()

# ์ƒํ•˜์ขŒ์šฐ
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

def dfs(x,y,cnt):
    global max_cnt
    visited.add(graph[x][y])
    max_cnt = max(max_cnt, cnt)
    for i in range(4):
        nx, ny = x + dx[i],  y + dy[i]
        if 0 <= nx < r and 0 <= ny < c:
            if graph[nx][ny] not in visited:
                dfs(nx,ny,cnt+1)
    visited.remove(graph[x][y])
    

max_cnt = 0
dfs(0,0,1)
print(max_cnt)