[BOJ] 11967. ๋ถˆ์ผœ๊ธฐ(๐Ÿฅ‡, BFS)

lemythe423ยท2023๋…„ 7์›” 30์ผ
0

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

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

๋ฌธ์ œ

ํ’€์ด

BFS๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํƒ์ƒ‰ํ–ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฐฉ์˜ ๋ถˆ์„ ๋‹ค ํ‚ฌ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ. ํƒ์ƒ‰์„ ํ•˜๋ฉด์„œ ํ์— ๋‹ด์•„์•ผ ํ•˜๋Š” ๊ฐ’๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

๋ฐฉ์— ๋ถˆ์€ ์ผœ์กŒ์ง€๋งŒ โญ•๏ธ ์•„์ง ๋ฐฉ๋ฌธ์€ ํ•˜์ง€ ์•Š์€ ๊ณณ โŒ
๋ฐฉ์— ๋ถˆ์€ ์ผœ์ง€์ง€ ์•Š์•˜์ง€๋งŒ โŒ ๋ฐฉ๋ฌธ์€ ํ•œ ๊ณณ โญ•๏ธ

์—ฌ๊ธฐ์„œ ๋ถˆ์ด ์ผœ์กŒ๋‹ค๋Š” ์ด ๋ฐฉ์˜ ๋ถˆ์„ ์ผค ์ˆ˜ ์žˆ๋Š” ์Šค์œ„์น˜๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์ง€๋‚˜์ณ์™”๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ๋ฐฉ๋ฌธ์„ ํ–ˆ๋‹ค๋Š” ๊ฒƒ์€ ๋ถˆ์ด ์ผœ์ง„ ๋ฐฉ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด์—ˆ๋‹ค๋Š” ๊ฒƒ.

์—ฌ๊ธฐ์„œ ๋ฐฉ์— ๋ถˆ๋„ ์ผœ์กŒ๊ณ  โญ•๏ธ ๋ฐฉ๋ฌธ๋„ ํ•œ ๊ณณ์€ โญ•๏ธ ๊ฐˆ ํ•„์š”๊ฐ€ ์—†๋‹ค.

# ๋ถˆ์ผœํ‚ค
import sys
from collections import deque, defaultdict
input = sys.stdin.readline

n, m = map(int, input().rstrip().split())
room = defaultdict(list)
visited = defaultdict(bool)
light = dict()

for _ in range(m):
    x, y, a, b = map(lambda x: int(x)-1, input().rstrip().split())
    room[(x, y)].append([a, b])

queue = deque([(0, 0)])
light[(0, 0)] = True
visited[(0, 0)] = True
while queue:
    x, y = queue.popleft()

    for nx, ny in room[(x, y)]:
        # ์•„์ง ๋ฐฉ์— ๋ถˆ์ด ์ผœ์ง€์ง€ ์•Š์•˜์ง€๋งŒ ๋ฐฉ๋ฌธ์€ ํ•œ ๊ณณ 
        if not light.get((nx, ny)):
            light[(nx, ny)] = True
            if visited[(nx, ny)]:
                queue.append((nx, ny))

    for nx, ny in (x-1, y), (x+1, y), (x, y-1), (x, y+1):
        if nx<0 or ny<0 or nx>=n or ny>=n:
            continue
		
        # ์•„์ง ๋ฐฉ๋ฌธ์€ ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ถˆ์€ ์ผœ์ ธ์žˆ๋Š” ๊ณณ
        if not visited[(nx, ny)]:
            visited[(nx, ny)] = True
            if light.get((nx, ny)):
                queue.append((nx, ny))

print(light)
print(len(light))

"""
3 6
1 1 1 2
2 1 2 2
1 1 1 3
2 3 3 1
1 3 1 2
1 3 2 1
"""
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

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