[BOJ] 1245. ๋†์žฅ ๊ด€๋ฆฌ (๐Ÿฅ‡, BFS)

lemythe423ยท2023๋…„ 10์›” 8์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
64/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

๋ด‰์šฐ๋ฆฌ์˜ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๊ฐ€๋กœ์™€ ์„ธ๋กœ๊ฐ€ ๊ฐ๊ฐ 1์ดํ•˜ ๊ฑฐ๋ฆฌ์— ์žˆ๋Š” ๊ฐ™์€ ๋†’์ด์˜ ๊ฐ’
์ธ์ ‘ํ•œ ๋ชจ๋“  ๊ฐ’๋“ค์ด ๋‹ค ํ˜„์žฌ ๋ด‰์šฐ๋ฆฌ์˜ ๋†’์ด๋ณด๋‹ค ๋‚ฎ์€ ๋†’์ด์ธ ๊ฒฝ์šฐ

๊ทธ๋ฆผ์—์„œ ํ•˜๋Š˜์ƒ‰์€ ์ธ์ ‘ํ•œ ๋†’์ด๋ฅผ ๊ฐ€์ง„ ์ธ์ ‘ํ•œ ๊ฒฉ์ž๋“ค์„ ๋ฌถ์€ ๊ฒƒ์ด๋‹ค.

์œ„์˜ ๊ฒฝ์šฐ๋Š” ์ฃผ๋ณ€์— ๋†’์ด 3์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ด‰์šฐ๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ‘์˜ ๊ฒฝ์šฐ๋Š” ์ฃผ๋ณ€์— 0๊ณผ 1๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ด‰์šฐ๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ๊ฐ™์€ ๋†’์ด์˜ ์ธ์ ‘ํ•œ ๊ฒฉ์ž๋“ค์„ ์ฐพ๊ณ , ์ธ์ ‘ํ•œ ๊ฒฉ์ž ์ค‘ ๋” ๋†’์€ ๋†’์ด๋ฅผ ๊ฐ–๋Š” ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์ด๋‹ค. ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์œผ๋กœ ์ง„ํ–‰ํ–ˆ์œผ๋ฉฐ, ๊ฐ™์€ ๋†’์ด๋ฅผ ๊ฐ–๋Š” ๊ฒฝ์šฐ ํ์— ๋„ฃ๊ณ  ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๊ณ , ๋” ๋†’์€ ๋†’์ด๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ flag์— False๊ฐ’์„ ๋„ฃ์—ˆ๋‹ค. ์ตœ์ข…์ ์œผ๋กœ ๋ด‰์šฐ๋ฆฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— flag๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋ฐ˜ํ™˜๋œ ๊ฐ’์„ cnt์— ๋”ํ•˜๋Š” ์‹์œผ๋กœ ๊ฐœ์ˆ˜๋ฅผ ์…Œ๋‹ค.

์ธ์ ‘ํ•œ ๊ฐ’ ํƒ์ƒ‰ ์ค‘ ๋” ๋†’์€ ๋†’์ด๋ฅผ ์ฐพ๋Š” ๊ฒฝ์šฐ๋Š” ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋œ ๊ฐ’์— ์ƒ๊ด€์—†์ด ์ฐพ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„์„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

# ๋†์žฅ ๊ด€๋ฆฌ

def bfs(_i, _j, x):
    flag = True
    visited[_i][_j] = True
    queue = [(_i, _j)]
    while queue:
        i, j = queue.pop(0)
        for di, dj in dij:
            ni, nj = i+di, j+dj 
            if -1<ni<N and -1<nj<M:
                if arr[ni][nj] > arr[i][j]:
                    flag = False
                elif not visited[ni][nj] and arr[ni][nj] == x:
                    visited[ni][nj] = True
                    queue.append((ni, nj))
    return flag

N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
visited = [[False]*M for _ in range(N)]
dij = [(-1, 0), (0, 1), (1, 0), (0, -1), (1, 1), (1, -1), (-1, 1), (-1, -1)]

cnt = 0 
for i in range(N):
    for j in range(M):
        if not visited[i][j]:
            cnt += bfs(i, j, arr[i][j])
print(cnt)
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€