728x90
2583๋ฒ: ์์ญ ๊ตฌํ๊ธฐ
์ฒซ์งธ ์ค์ M๊ณผ N, ๊ทธ๋ฆฌ๊ณ K๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. M, N, K๋ ๋ชจ๋ 100 ์ดํ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ K๊ฐ์ ์ค์๋ ํ ์ค์ ํ๋์ฉ ์ง์ฌ๊ฐํ์ ์ผ์ชฝ ์๋ ๊ผญ์ง์ ์ x, y์ขํ๊ฐ๊ณผ ์ค
www.acmicpc.net
์ค๋ช
M×N ๋ชจ๋์ข ์ด์์ K๊ฐ์ ์ง์ฌ๊ฐํ์ด ์๊ณ , ๊ทธ ์ง์ฌ๊ฐํ ๋ถ๋ถ์ ์ ์ธํ ๋๋จธ์ง ์์ญ์ ๊ฐ์์ ๋์ด๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
ํ์ด
โ ๊ทธ๋ํ ํ์ - DFS๋ก ํ์ด
Solution
#18:35 - 19:17 -> ํ์ด๋ด 19:57 ์ ์ถ
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**9) #->๋ฐํ์ ์๋ฌ ๋ฐฉ์ง/์ฌ๊ท ๊น์ด ๋ณ๊ฒฝ
M, N, K = map(int, input().split())
graph = [[0]*N for _ in range(M)] #๋ชจ๋์ข
์ด
for _ in range(K):
x1, y1, x2, y2 = map(int, input().split()) #์
๋ ฅ ๋ฐ๊ธฐ
for i in range(y1, y2):
for j in range(x1, x2):
graph[i][j] = 1 # ์ฌ๊ฐํ์ธ ๋ถ๋ถ๋ง ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
#์ํ์ข์ฐ
dx = [-1, 1, 0, 0]
dy = [0, 0, 1, -1]
#d = [(1, 0), (0, -1), (-1, 0), (0, 1)]
def DFS(x, y, cnt):
graph[y][x] = 1 #์ฌ๊ฐํ์ด ์๋ ๋ถ๋ถ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
#์ฃผ๋ณ ํ์(๊ฐ์ ์์ญ์ธ์ง ํ์)
#for dy, dx in d:
# ny, nx = y + dy, x + dx
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if -1 < nx < N and -1 < ny < M and graph[ny][nx] == 0: #์ฌ๊ฐํ์ด ์๋ ๊ณณ
cnt = DFS(nx, ny, cnt+1)
return cnt
res = []
for i in range(M):
for j in range(N):
if graph[i][j] == 0: #์ฌ๊ฐํ์ด ์๋ ๊ณณ๋ง ํ์
res.append(DFS(j, i, 1)) #๋ถ๋ฆฌ๋ ์์ญ์ด ํ๋๋ผ๋ ์์ผ๋ฉด ํ์์ ํ๊ธฐ ๋๋ฌธ์ ์นด์ดํธ 1
print(len(res))
print(*sorted(res)) #asterisk(*) - unpack728x90
'๐งฉ Algorithm > [BOJ] Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| BOJ 2312๋ฒ : ์ ๋ณต์ํ๊ธฐ (Python/Silver 3) (0) | 2023.09.24 |
|---|---|
| BOJ 2960๋ฒ : ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (Python/Silver 4) (0) | 2023.09.23 |
| BOJ 2468๋ฒ : ์์ ์์ญ (Python/Silver 1) (0) | 2023.09.06 |
| BOJ 7568๋ฒ : ๋ฉ์น (Python/Silver 5) (0) | 2023.09.04 |
| BOJ 2667๋ฒ : ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (Python/Silver 1) (0) | 2023.05.16 |