๋ฌธ์
<๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ์ ์ฌ๊ฐํ ๋ชจ์์ ์ง๋๊ฐ ์๋ค. 1์ ์ง์ด ์๋ ๊ณณ์, 0์ ์ง์ด ์๋ ๊ณณ์ ๋ํ๋ธ๋ค. ์ฒ ์๋ ์ด ์ง๋๋ฅผ ๊ฐ์ง๊ณ ์ฐ๊ฒฐ๋ ์ง์ ๋ชจ์์ธ ๋จ์ง๋ฅผ ์ ์ํ๊ณ , ๋จ์ง์ ๋ฒํธ๋ฅผ ๋ถ์ด๋ ค ํ๋ค. ์ฌ๊ธฐ์ ์ฐ๊ฒฐ๋์๋ค๋ ๊ฒ์ ์ด๋ค ์ง์ด ์ข์ฐ, ํน์ ์๋์๋ก ๋ค๋ฅธ ์ง์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ๋๊ฐ์ ์์ ์ง์ด ์๋ ๊ฒฝ์ฐ๋ ์ฐ๊ฒฐ๋ ๊ฒ์ด ์๋๋ค. <๊ทธ๋ฆผ 2>๋ <๊ทธ๋ฆผ 1>์ ๋จ์ง๋ณ๋ก ๋ฒํธ๋ฅผ ๋ถ์ธ ๊ฒ์ด๋ค. ์ง๋๋ฅผ ์ ๋ ฅํ์ฌ ๋จ์ง์๋ฅผ ์ถ๋ ฅํ๊ณ , ๊ฐ ๋จ์ง์ ์ํ๋ ์ง์ ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.

์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์ง๋์ ํฌ๊ธฐ N(์ ์ฌ๊ฐํ์ด๋ฏ๋ก ๊ฐ๋ก์ ์ธ๋ก์ ํฌ๊ธฐ๋ ๊ฐ์ผ๋ฉฐ 5≤N≤25)์ด ์ ๋ ฅ๋๊ณ , ๊ทธ ๋ค์ N์ค์๋ ๊ฐ๊ฐ N๊ฐ์ ์๋ฃ(0ํน์ 1)๊ฐ ์ ๋ ฅ๋๋ค.
์ถ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์ด ๋จ์ง์๋ฅผ ์ถ๋ ฅํ์์ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋จ์ง๋ด ์ง์ ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ์์ค.
์์ ์ ๋ ฅ 1
7
0110100
0110101
1110101
0000111
0100000
0111110
0111000
์์ ์ถ๋ ฅ 1
3
7
8
9
# ํ์ด ๋ฐฉ๋ฒ
๋จ์ง ์๋ฅผ ๊ตฌํ๋ ๊ฒ๊น์ง๋ ์ด์ทจ์ฝ ๊ต์ฌ์ ์์ด์คํฌ๋ฆผ ๋ฌธ์ ์ ๋น์ทํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด์ ๊ฐ๊ฐ์ ๋จ์ง์ ๋ช๊ฐ์ ์ํํธ๊ฐ ์๋๋ ์ด๊ฑด ์ข ๊ณ ๋ฏผ์ด ํ์ํ๋ค.
์ ์ญ๋ณ์๋ฅผ ํตํด์ dfs๋ฅผ ๋๋ฉด์ ์นด์ดํธ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฅผ ํด๊ฒฐํ๋ค. ์ ์ญ๋ณ์ ์ฌ์ฉ์ ์กฐ๊ธ ๋ฏธ์ํ ๋ฏ ํ๋ฐ ์์ง..
# ์ฝ๋
๋ณต์ต ver์ ์ฝ๋๊ฐ ์กฐ๊ธ ๋ ๋๋ต๊ณ , ๋ณ์๋ ์ค์ฌ์ ํ์๋ค
# 2025-04-17 14:26-50 (๋ณต์ตver)
import sys
sys.stdin = open("input.txt","r")
N = int(sys.stdin.readline().strip())
graph = [list(map(int,sys.stdin.readline().strip())) for _ in range(N)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def dfs(x,y):
global cnt
graph[x][y] = 2
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx < N and 0 <= ny < N:
if graph[nx][ny] == 1: # ๋ฒฝ๋ ์๋๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ
cnt += 1
dfs(nx,ny)
result = []
for i in range(N):
for j in range(N):
cnt = 1
if graph[i][j] == 1: # ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ
dfs(i,j)
result.append(cnt)
print(len(result))
print(*sorted(result),sep='\n')
# 2025-04-10
import sys
sys.stdin = open("input.txt","r")
n = int(sys.stdin.readline().strip())
map = [list(map(int,sys.stdin.readline().strip())) for _ in range(n)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def dfs(x,y):
global cnt_houses
if x <= -1 or x >= n or y <= -1 or y >= n:
return False
if map[x][y] == 1:
map[x][y] = 0
cnt_houses += 1
for i in range(4):
dfs(x + dx[i], y + dy[i])
return True
return False
cnt = 0
result = []
cnt_houses = 0
for i in range(n):
for j in range(n):
if dfs(i,j):
cnt += 1
result.append(cnt_houses)
cnt_houses = 0
print(cnt)
print(*sorted(result), sep='\n')
'๐ Study > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Silver I] 1697- ์จ๋ฐ๊ผญ์ง (0) | 2025.04.10 |
---|---|
[Silver II] 11724 - ์ฐ๊ฒฐ ์์์ ๊ฐ์ (0) | 2025.04.10 |
[Silver IV] 2331 - ๋ฐ๋ณต์์ด (0) | 2025.04.10 |
[Silver III] 10451 - ์์ด ์ฌ์ดํด (0) | 2025.04.09 |
[Silver I] 2178 - ๋ฏธ๋กํ์ (0) | 2025.04.09 |