๐Ÿงฉ Algorithm/[BOJ] Silver

BOJ 2583๋ฒˆ : ์˜์—ญ ๊ตฌํ•˜๊ธฐ (Python/Silver 1)

devCloud 2023. 9. 22. 23:53
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(*) - unpack
728x90