
BOJ 1987 ์ํ๋ฒณ
๋ฌธ์ ํต์ฌ์ ๊ฐ์ ์ํ๋ฒณ ๋ ๋ฒ ๋ชป ๋ฐ์. ์์ ์นธ ํฌํจํด์ ์ต๋ ๋ช ์นธ๊น์ง ๊ฐ ์ ์๋ ๋ฌผ์ด๋ด
์ ๊ทผ
DFS+๋ฐฑํธ๋ํน. ์ขํ ๋ฐฉ๋ฌธ ๋ง๊ณ ์ํ๋ฒณ ์ค๋ณต๋ง ๋ง์ผ๋ฉด ๋จ. ๋นํธ๋ง์คํฌ๋ก ์ฒ๋ฆฌ. A~Z๋๊น 26๋นํธ๋ฉด ๋จ
๋นํธ๋ง์คํฌ
visited | (1 << idx)๋ก ๋ฐฉ๋ฌธ ํ์, visited & (1 << idx)๋ก ์ด๋ฏธ ๊ฐ๋์ง ํ์ธ. ๋ฆฌ์คํธ๋ณด๋ค ๋น ๋ฆ
DFS ํ๋ฆ
์ง๊ธ ์นธ์์ ์ํ์ข์ฐ ๋๋ ค์ ์ ๊ฐ์ผ๋ฉด depth+1 ํด์ ์ฌ๊ท. visited๋ ์๋ก ๋๊ธฐ๋๊น ์๋ณต ํ์ ์์
์์
(0,0) ์นธ ์ํ๋ฒณ์ผ๋ก ์์, depth=1๋ถํฐ ์์ํ๋ฉด ๋จ
๋
#dfs,bitmasking,backtracking
import sys
input=sys.stdin.readline
def dfs(y,x,visited,depth):
directions=[(1,0),(0,-1),(-1,0),(0,1)]
global answer
answer=max(answer,depth)
for dy,dx in directions:
ny=y+dy
nx=x+dx
#๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ๋ฒ์์ ์ํ๊ณ
if 0<=ny<r and 0<=nx<c:
idx=ord(grid[ny][nx])-ord('A')
#๋ฐฉ๋ฌธํ๋ ์ํ๋ฒณ์ธ ๊ฒฝ์ฐ(์ ์ง๋ถ๊ฐ)
if visited & (1<<idx):
continue
#๋ฐฉ๋ฌธํ์ง ์์๋ ์ํ๋ฒณ์ธ ๊ฒฝ์ฐ(์ ์ง๊ฐ๋ฅ)
dfs(ny,nx,visited|1<<idx,depth+1)
r,c=map(int,input().split())
grid=[]
for _ in range(r):
grid.append(list(input().strip()))
visited=0
start_bit=ord(grid[0][0])-ord('A')
visited=(1<<start_bit)
answer=1
dfs(0,0,visited,1)
print(answer)
๋ฐ์ํ
'๐ Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| โ BOJ 14626 - ISBN (0) | 2025.07.05 |
|---|---|
| โ BOJ 2448 - ์ฌ๊ท ๋ณ์ฐ๊ธฐ (0) | 2025.07.05 |
| โ BOJ 1504 - ๋ค์ต์คํธ๋ผ ์์ฉ (0) | 2025.07.04 |
| โ BOJ 17070 - 3์ฐจ์ DP (0) | 2025.07.03 |
| โ BOJ 15686 - ์กฐํฉ ๋ฐฑํธ๋ํน (0) | 2025.07.02 |