ํ’€์ด


์ƒ‰์ข…์ด ๋ฌธ์ œ์˜ ์–ด๋ ค์šด ๋ฒ„์ „์ด๋‹ค. ์ฒ˜์Œ์—” ์ขŒํ‘œ ์ตœ๋Œ€ ์ตœ์†Œ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ๋‘˜๋ ˆ๋งŒ ๊ตฌํ•ด์ฃผ๋ฉด ๋  ์ค„ ์•Œ์•˜๋Š”๋ฐ ๊ฒน์น˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๊ณ  ์ค‘๊ฐ„์— ๊ตฌ๋ฉ์ด ๋šซ๋ ค์žˆ์„ ๊ฒฝ์šฐ ๊ทธ ๋‘˜๋ ˆ๊นŒ์ง€ ๊ตฌํ•ด์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ–ˆ๋‹ค.

BFS ๋ฅผ ํ†ตํ•ด ๊ฒฝ๊ณ„์„ ์„ ๋งŒ๋‚ ๋•Œ๋งˆ๋‹ค ans ๋ฅผ 1 ์”ฉ ๋”ํ•ด์ฃผ๋‹ค ๋ณด๋ฉด ๋‘˜๋ ˆ์˜ ๊ธธ์ด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋จผ์ € 100 x 100 ์˜ ๋„ํ™”์ง€๋ฅผ ๊ตฌํ˜„ํ•ด ์ค„ ๋•Œ ๋ชจ์„œ๋ฆฌ์— ์ƒ‰์ข…์ด๊ฐ€ ๋ฐฐ์น˜๋  ๊ฒƒ์„ ๊ฐ์•ˆํ•˜์—ฌ 102 x 102 ๋„ํ™”์ง€๋ฅผ ์„ ์–ธํ•ด์ค€๋‹ค.

ํ•œ ์นธ์”ฉ ์—ฌ์œ ๊ฐ€ ์žˆ์–ด์•ผ BFS ํƒ์ƒ‰์„ ํ•  ๋•Œ ๊ฒฝ๊ณ„์„ ์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ดํ›„ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์— ๋”ฐ๋ผ ์ƒ‰์ข…์ด๊ฐ€ ๋ฐฐ์น˜๋œ ์ง€์—ญ์„ 1 ๋กœ ๋ฐ”๊ฟ”์ค€ ํ›„ ์ „์—ญ์„ ํƒ์ƒ‰ํ•˜๋ฉฐ BFS ๋ฅผ ์ˆ˜ํ–‰ํ•ด์ค€๋‹ค.

์ƒ‰์ข…์ด๊ฐ€ ํƒ์ƒ‰๋œ ์ง€์ ์—์„œ BFS ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด ํ•ด๋‹น ์ƒ‰์ข…์ด์˜ ์˜์—ญ์„ ์ „์ฒด์ ์œผ๋กœ ํƒ์‚ญํ•˜๋ฉฐ ๊ฒฝ๊ณ„์„ ์— ๋‹ฟ์„ ๋•Œ ๋งˆ๋‹ค ans ๊ฐ’์ด ์˜ฌ๋ผ๊ฐ„๋‹ค.

๊ฒฝ๊ณ„์„ ์˜ ๊ฐ’์€ ๊ฒฐ๊ตญ ๋‘˜๋ ˆ์˜ ๊ธธ์ด๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ƒ‰์ข…์ด ์˜์—ญ์„ ๋ชจ๋‘ ํƒ์ƒ‰ํ–ˆ์„ ๊ฒฝ์šฐ ๊ทธ ์ƒ‰์ข…์ด ์˜์—ญ์˜ ๋‘˜๋ ˆ๋ฅผ ๊ตฌํ•œ ๊ฒƒ์ด๋‹ค.

๋ฆฌํ„ด๋ฐ›์€ ๊ฐ’์„ answer ์— ๋”ํ•ด์ค€ ํ›„ ์•„์ง ํƒ์ƒ‰๋˜์ง€ ์•Š์€ ์ƒ‰์ข…์ด ์˜์—ญ์„ ์ฐพ์•„ ์œ„๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

์†Œ์Šค์ฝ”๋“œ


# ์ƒ‰์ข…์ด - 2
from collections import deque
import sys
input = sys.stdin.readline
 
def bfs(i, j):
    q = deque()
    q.append((i, j))
    visited[i][j] = 1
    ans = 0
    while q:
        x, y = q.popleft()
        for k in range(4):
            nx = x + dx[k]
            ny = y + dy[k]
            if 0 <= nx < 102 and 0 <= ny < 102 and visited[nx][ny] == 0:
                if board[nx][ny] == 1:
                    q.append((nx, ny))
                    visited[nx][ny] = 1
                else:
                    ans += 1
    return ans
 
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
 
board = [[0] * 102 for _ in range(102)]
visited = [[0] * 102 for _ in range(102)]
answer = 0
 
for _ in range(int(input())):
    x, y = map(int, input().split())
    for i in range(x+1, x+11):
        for j in range(y+1, y+11):
            board[i][j] = 1
 
for i in range(1, 102):
    for j in range(1, 102):
        if board[i][j] == 1 and visited[i][j] == 0:
            answer += bfs(i, j)
 
print(answer)

References