๋ด ํฌ์คํ
: [Python/ํ์ด์ฌ] [๐ฅ3] ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ 2606 - ๋ฐ์ด๋ฌ์ค
*์ด ํฌ์คํ
์ ๋ง์ง๋ง์ผ๋ก ์ ์ DFS ์๊ณ ๋ฆฌ์ฆ ํ์ด๋ ๋ง๋ฌด๋ฆฌํ๋ ค๊ณ ํ๋ค
(dy, dx๋ผ๋ ์ข์ DFS์๊ณ ๋ฆฌ์ฆ ํ์ด๋ฅผ ์ด์ ์์ผ ์ดํดํ๊ธฐ ๋๋ฌธ...๐คฆ๐ปโโ๏ธ)
์ฐ์ ์
๋ ฅ๊ฐ m,n,k์ ์ฃผ์ด์ง๋ ๋
ธ๋๋ค์ ์ ์ฅํ์
๋
ธ๋๋ค์ ์ด์ฉํด for loof
์ผ๋ก ๋ชจ๋์ข
์ด๋ฅผ MAP์์ญ์ ์์น ํ๊ณ ,
์์ฑ๋ MAP์ ์ด์ฉํด dfs()
๋ฅผ ๋ฐ๋ณตํธ์ถํ๋ฉฐ
์์น ๋์ง ์์ ์์ญ์ ๊ฐ์ (cnt)
์ ์์ญ์ ๋์ด(dep)
๋ฅผ ๋ฐํํ์ฌ ์ถ๋ ฅํ์
[[sx,sy,ex,ey], ...]
ํํ๋ก ์ ์ฅํด๋๊ณ ,for loof
๋ฅผ sxโex๊น์ง, syโey๊น์ง ๋ฐ๋ณตํ๋ฉด์ ๋ชจ๋์ข
์ด๋ฅผ "1"๋ก ์์น ํ์for loof
์ ์ด์ฉํ์ฌ amap[y][x]์ด 0์ด๋ฉด dfs(x,y)
๋ฅผ ํธ์ถํ๋ฉด์(dep)
์ ๊ณ์ฐํ์ฌ, res
์ ์ ์ฅํ๊ณ ,(cnt)
๋ฅผ +1 ์ฆ๊ฐ์ํค์ BUT
์ฑ๊ณต์ ์ผ๋ก ๊ตฌํํ์ฌ ์ ์ถํ๋ฉด ๋ฐํ์์๋ฌ ์ค (Recursion Error)๋ฅผ ๋ณด๊ฒ๋๋๋ฐ,
์ด๋ ๋ฐฑ์ค์์ ์ฌ๊ทํธ์ถ์ ๊น์ด๋ฅผ ์์๋ก "1000"์ผ๋ก ์ง์ ํด๋ฌ์ ๋ฐ์ํ๋ ์๋ฌ์ด๋ค.
๐๐ปํด๊ฒฐ๋ฐฉ๋ฒ
imprt sys
sys.setrecursion(100000)
sys ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ, ์ฌ๊ทํธ์ถ์ ๊น์ด๋ฅผ ์์ํฌ๊ธฐ๋ก ๋๋ฆฌ์!
100000์ด๋ , 10000000์ด๋ ๋ด ํจ์์ ์ต๋๊น์ด๋ณด๋ค ๊น์ผ๋ฉด ๋๋ค.
๋๋
dx, dy๋ฅผ ์ด์ฉํ DFS์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ฉด ๋๋๋ฐ ์ด๋ ๋ค์ ํฌ์คํ
์์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10000)
m,n,k = map(int, input().split())
node = [list(map(int,input().split())) for _ in range(k)]
amap = [[0 for _ in range(n)] for _ in range(m)]
cnt = 0 #์์ญ์ ๊ฐ์๋ฅผ ์ต์ข
๋ฐํํ ๋ณ์
res = [] #์์ญ ๋น ๋์ด๋ฅผ ์ต์ข
๋ฐํํ list (sort๋ฅผ ์ด์ฉํ์ฌ ์ค๋ฆ์ฐจ์ํ ์์ )
#๋ชจ๋์ข
์ด ์์น ํ๊ธฐ
for sx,sy,ex,ey in node:
for x in range(sx,ex):
for y in range(sy,ey):
amap[y][x] = 1
#์์น ์๋ ์์ญ์ ๋์ด ๊ตฌํ๋ฉด์ ์์น ํด์ฃผ๊ธฐ (์ฌ๋ฐฉ๋ฌธํ์ง ์๊ฒ ํ๋ ค๊ณ ์์น )
def dfs(x,y):
global dep
if x<0 or y<0 or x>=n or y>=m:
return
if amap[y][x]:
return
else:
dep += 1 #ํ์ฌ ์์ญ์ ๋์ด๋ฅผ ์ ์ฅ(global์ด๋ฏ๋ก ํจ์ ๋ฐ์ผ๋ก ์ ๋ฌ ๊ฐ๋ฅ)
amap[y][x] = 1
dfs(x-1,y)
dfs(x,y-1)
dfs(x+1,y)
dfs(x,y+1)
return
#์์น ์๋ ์์ญ ๋์ด, ๊ฐ์ ๊ตฌํ๊ธฐ
for y in range(m):
for x in range(n):
if not amap[y][x]:
dep = 0
dfs(x,y)
res.append(dep)
cnt += 1 #์์ญ์ ๊ฐ์๋ฅผ ์ ์ฅํจ
print(cnt)
print(*sorted(res))
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10000)
m,n,k = map(int, input().split())
node = [list(map(int,input().split())) for _ in range(k)]
amap = [[0 for _ in range(n)] for _ in range(m)]
cnt = 0 #์์น ์๋ ์์ญ์ ๊ฐ์๋ฅผ ์ต์ข
๋ฐํํ ๋ณ์
res = [] #์์น ์๋ ์์ญ ๋น ๋์ด๋ฅผ ์ต์ข
๋ฐํํ ๋ณ์ (์ค๋ฆ์ฐจ์ ํ ์์ )
#๋ชจ๋์ข
์ด ์์น ํ๊ธฐ
for sx,sy,ex,ey in node:
for x in range(sx,ex):
for y in range(sy,ey):
amap[y][x] = 1
โ๋์์๋ฆฌ
1.๋ฒ์์ ์ด๋ฏธ node์ [[sx,sy,ex,ey] ...]ํํ๋ก ์ ์ฅํด๋๋ค
๊ทธ node๋ฅผ ํ๋์ฉ ๊บผ๋ด๋ฉด์ x๊ฐ์ sxโex๋งํผ, y๊ฐ์ syโey๋งํผ ์์น ํ๋ค.
โปex, ey๊ฐ์ ์ด๋ฏธ 1์ฉ ๋ํด์ ธ ์์ผ๋ฏ๋ก -1ํด์ค ํ์๊ฐ ์๋ค.
(sx=2, ex=4์ด๋ฉด 2,3์ด ์์น ๋๋ค)
#์์น ์๋ ์์ญ์ ๋์ด ๊ตฌํ๋ฉด์ ์์น ํด์ฃผ๊ธฐ (์ฌ๋ฐฉ๋ฌธํ์ง ์๊ฒ ํ๋ ค๊ณ ์์น )
def dfs(x,y):
global dep
if x<0 or y<0 or x>=n or y>=m: #์ฃผ์ด์ง ์์ญ ๋ฒ์ด๋๋ฉด return
return
if amap[y][x]: #ํ์ฌ amap์ด 1, ์ฆ ์์น ๋์ด ์์ผ๋ฉด return
return #(์์น ์ ๋ ์์ญ์ ๊ตฌํ ๊บผ๋๊น)
else: #ํ์ฌ amap์ด 0, ์์น ๋์ด ์์ง ์์ผ๋ฉด
dep += 1 #๋์ด ์ฆ๊ฐ
amap[y][x] = 1 #ํ amap์ฌ๋ฐฉ๋ฌธํ์ง ์๋๋ก 1๋ก ์์น
dfs(x-1,y) #4๋ฐฉํฅ์ผ๋ก dfs ์ฌํธ์ถ
dfs(x,y-1)
dfs(x+1,y)
dfs(x,y+1)
return
#์์น ์๋ ์์ญ ๋์ด, ๊ฐ์ ๊ตฌํ๊ธฐ
for y in range(m):
for x in range(n):
if not amap[y][x]: #amap์ด ํ์ฌ ์์น ์ด ์ ๋์ด ์์ผ๋ฉด
dep = 0
dfs(x,y) #dfs()์ x,y๊ฐ ์ ๋ฌ
res.append(dep) #dfs()์์ ์ ์ฅํ dep๊ฐ res์ ์ ์ฅ
cnt += 1 #dfs()๊ฐ ํ ๋ฒ ๋์ํ์ผ๋ฏ๋ก cnt+1
print(cnt)
print(*sorted(res)) #print์ "*"์์๋ list์ "[]"๋ฅผ ๋ผ๊ณ ์ถ๋ ฅํด์ค๋ค
๋ด ํฌ์คํ
: [Python/ํ์ด์ฌ] [๐ฅ3] ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ 2606 - ๋ฐ์ด๋ฌ์ค
๋ด ํฌ์คํ
: [Python/ํ์ด์ฌ] [๐ฅ2] ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ 11724 - ์ฐ๊ฒฐ ์์์ ๊ฐ์
ํ์ฌ ํฌ์คํ
: [Python/ํ์ด์ฌ] [๐ฅ1] ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ 2583 - ์์ญ ๊ตฌํ๊ธฐ
์ธ,
๋ฐฑ์ค DFS๋ฌธ์ ๋ชจ์ ์์ "์ฐ๊ฒฐ ์์์ ๊ฐ์"๋ถํฐ ํ ๋ฌธ์ "์์ญ๊ตฌํ๊ธฐ" ๊น์ง
์ ์ DFS์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํ์ด๋ณด์๋ค.
(dfs(x,y)๋ฅผ 4๋ฐฉํฅ(x-1,y), (x+1,y), (x,y-1), (x,y+1)์ผ๋ก ์ฌ๊ทํธ์ถํ๋ฉด์ ํธ๋ ๋ฐฉ์)
์ด์ ์ ์ DFS์๊ณ ๋ฆฌ์ฆ๋ฐฉ์์ ์ถฉ๋ถํ ์ฐ์ตํ ๊ฒ ๊ฐ์ผ๋,
dx[-1,1,0,0], dy[0,0,-1,1]๊ณผ ๊ฐ์ด ์ขํ๋ฅผ ์ด์ฉํ DFS์๊ณ ๋ฆฌ์ฆ ํ์ด๋ฅผ ์ฐ์ตํ๋ ค ํ๋ค.
๊ทธ๋ ๋ค๊ณ dx,dy๋ฅผ ์ด์ฉํ DFS๊ฐ ์ ์์๊ณ ๋ฆฌ์ฆ์ด ์๋๋ผ๋ ๊ฑด ์๋....