๐ค๋ฌธ์ ํด๊ฒฐ
S1 | BFS
์ด๋ฒ์๋ 2์ฐจ์๋ฆฌ์คํธ๋ฅผ ํ์ฉํ์ง ์๊ณ set()์ ํ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๊ฐ๊ฐ์ ์ขํ๊ฐ ์ฃผ์ด์ ธ ์์ผ๋ฏ๋ก ์ฐ๋ ๊ธฐ๋ฅผ ํ๋ ์ ํํด ์ํ์ข์ฐ BFSํ์์ ํ๋ค.
์ฃผ๋ณ์ ์ฐ๋ ๊ธฐ๋ฅผ ์ ํํ ๋๋ง๋ค visited ์ add ํด์ค๋ค.
๋ count + 1 ์ ํด์ค์ ์ฐ๋ ๊ธฐ ๋๋ฏธ์ ํฌ๊ธฐ๋ฅผ answer ์ ๋ด๋๋ค.
๐จ set() ์ ์ฐ๋ ์ด์
if tmp in set() : ์ด๋ ๊ฒ tmp๊ฐ set()์ ์๋์ง ์๋์ง ํ์ธํ ๋ ์๊ฐ๋ณต์ก๋๊ฐ O(1) ์ด๋ค.
ํ์ง๋ง if tmp in list : list์ ๊ฒฝ์ฐ O(n) ์ด๋ค.
๐ป์์ค ์ฝ๋
import sys
from collections import deque
def bfs(x, y):
q = deque()
q.append((x, y))
cnt = 1 # ์์ํ ์ฐ๋ ๊ธฐ ํฌํจ
while q:
x, y = q.popleft()
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if 1 <= nx < N + 1 and 1 <= ny < M + 1:
if (nx, ny) in trashSet and (nx, ny) not in visited:
cnt += 1
q.append((nx, ny))
visited.add((nx, ny))
else:
answer.append(cnt)
if __name__ == "__main__":
N, M, K = map(int, sys.stdin.readline().split())
# set() ์ ์ฐ๋ ์ด์
# if tmp in set(): ์ด๋ ๊ฒ tmp๊ฐ set()์ ์๋์ง ์๋์ง ํ์ธํ ๋ ์๊ฐ๋ณต์ก๋๊ฐ O(1)์ด๋ค.
# ํ์ง๋ง if tmp in list: list์ ๊ฒฝ์ฐ O(n)์ด๋ค.
trashSet = set() # ์์๋ฌผ ์
visited = set() # ๋ฐฉ๋ฌธ ์ฒดํฌ
for _ in range(K):
r, c = map(int, sys.stdin.readline().split())
trashSet.add((r, c))
answer = []
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
for trash in trashSet:
if (trash[0], trash[1]) not in visited: # ๋ฐฉ๋ฌธํ์ง ์์๋ฐ๋ฉด
visited.add((trash[0], trash[1])) # ๋ฐฉ๋ฌธ ์ถ๊ฐ
bfs(trash[0], trash[1]) # BFS GOGO!
print(max(answer))
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋งํฌ: https://www.acmicpc.net/problem/1743
๋ฌธ์
์ฝ๋ ์ค์ฝ ์ฝ๋๋ฏธ๋์ 8์ธต์ ํ์๋ค์ด 3๋ผ์ ์์ฌ๋ฅผ ํด๊ฒฐํ๋ ๊ณต๊ฐ์ด๋ค. ๊ทธ๋ฌ๋ ๋ช๋ช ๋น์์ฌ์ ์ธ ํ์๋ค์ ๋งํ์ผ๋ก ์์๋ฌผ์ด ํต๋ก ์ค๊ฐ ์ค๊ฐ์ ๋จ์ด์ ธ ์๋ค. ์ด๋ฌํ ์์๋ฌผ๋ค์ ๊ทผ์ฒ์ ์๋ ๊ฒ๋ผ๋ฆฌ ๋ญ์น๊ฒ ๋ผ์ ํฐ ์์๋ฌผ ์ฐ๋ ๊ธฐ๊ฐ ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ถ์ ํ ์ ์๋์ ๊ฐ์ธ์ ์ผ๋ก ์ด๋ฌํ ์์๋ฌผ์ ์ค๋ดํ์ ๋ฌปํ๋ ๊ฒ์ ์ ๋ง ์ง์ ์ผ๋ก ์ซ์ดํ๋ค. ์ฐธ๊ณ ๋ก ์ฐ๋ฆฌ๊ฐ ๊ตฌํด์ผ ํ ๋ต์ ์ด ๋ฌธ์ ๋ฅผ ๋ธ ์กฐ๊ต๋ฅผ ๋ง์ถ๋ ๊ฒ์ด ์๋๋ค.
ํต๋ก์ ๋จ์ด์ง ์์๋ฌผ์ ํผํด๊ฐ๊ธฐ๋ ์ฌ์ด ์ผ์ด ์๋๋ค. ๋ฐ๋ผ์ ์ ์๋์ ๋จ์ด์ง ์์๋ฌผ ์ค์ ์ ์ผ ํฐ ์์๋ฌผ๋ง์ ํผํด ๊ฐ๋ ค๊ณ ํ๋ค.
์ ์๋์ ๋์ ์ ์ผ ํฐ ์์๋ฌผ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํด์ “10ra"๋ฅผ ์ธ์น์ง ์๊ฒ ๋์์ฃผ์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํต๋ก์ ์ธ๋ก ๊ธธ์ด N(1 ≤ N ≤ 100)๊ณผ ๊ฐ๋ก ๊ธธ์ด M(1 ≤ M ≤ 100) ๊ทธ๋ฆฌ๊ณ ์์๋ฌผ ์ฐ๋ ๊ธฐ์ ๊ฐ์ K(1 ≤ K ≤ 10,000)์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ K๊ฐ์ ์ค์ ์์๋ฌผ์ด ๋จ์ด์ง ์ขํ (r, c)๊ฐ ์ฃผ์ด์ง๋ค.
์ขํ (r, c)์ r์ ์์์๋ถํฐ, c๋ ์ผ์ชฝ์์๋ถํฐ๊ฐ ๊ธฐ์ค์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์์๋ฌผ ์ค ๊ฐ์ฅ ํฐ ์์๋ฌผ์ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ผ.
ํํธ
# . . .
. # # .
# # . .
์์ ๊ฐ์ด ์์๋ฌผ์ด ๋จ์ด์ ธ์๊ณ ์ ์ผํฐ ์์๋ฌผ์ ํฌ๊ธฐ๋ 4๊ฐ ๋๋ค. (์ธ์ ํ ๊ฒ์ ๋ถ์ด์ ํฌ๊ฒ ๋๋ค๊ณ ๋์ ์์. ๋๊ฐ์ ์ผ๋ก๋ ์์๋ฌผ ๋ผ๋ฆฌ ๋ถ์์ ์๊ณ ์ํ์ข์ฐ๋ก๋ง ๋ถ์์ ์๋ค.)
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ๋ฐฑ์ค - 2343. ๊ธฐํ ๋ ์จ (5) | 2020.09.09 |
---|---|
[python] ๋ฐฑ์ค - 1926. ๊ทธ๋ฆผ (0) | 2020.09.08 |
[python] ํ๋ก๊ทธ๋๋จธ์ค - ์ธ๋ฒฝ ์ ๊ฒ(2020 KAKAO BLIND RECRUITMENT) (0) | 2020.09.06 |
[python] ๋ฐฑ์ค - 11052. ์นด๋ ๊ตฌ๋งคํ๊ธฐ / 16194. ์นด๋ ๊ตฌ๋งคํ๊ธฐ 2 (0) | 2020.09.05 |
[python] ๋ฐฑ์ค - 1722. ์์ด์ ์์ (0) | 2020.09.04 |