์ƒˆ์†Œ์‹

๐Ÿงฎ ์•Œ๊ณ ๋ฆฌ์ฆ˜/-- ๋ฐฑ์ค€ (BOJ) - Python

๋ฐฑ์ค€ (boj) ํŒŒ์ด์ฌ - 2667 : ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ

  • -

#๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/2667

 

2667๋ฒˆ: ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ

<๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ์ง€๋„๊ฐ€ ์žˆ๋‹ค. 1์€ ์ง‘์ด ์žˆ๋Š” ๊ณณ์„, 0์€ ์ง‘์ด ์—†๋Š” ๊ณณ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฒ ์ˆ˜๋Š” ์ด ์ง€๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฐ๊ฒฐ๋œ ์ง‘์˜ ๋ชจ์ž„์ธ ๋‹จ์ง€๋ฅผ ์ •์˜ํ•˜๊ณ , ๋‹จ์ง€์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ด๋ ค ํ•œ๋‹ค. ์—ฌ

www.acmicpc.net

 

#๋‚œ์ด๋„ : Silver 1

 

 

#๋ถ„๋ฅ˜: DFS

 

 

#์ฝ”๋“œ(Python)

 

import sys
sys.setrecursionlimit(10000)

n = int(input())
map_ = []

area_cnt = 0
house_cnts = []

def is_valid(x,y):
	if x >= 0 and y >= 0 and x < n and y < m:
		return True
	return False

def dfs(x,y):
	global house_cnt
	if not is_valid(x,y) :
		return False
	
	if map_[x][y] == 1:
		map_[x][y] = 0
		dfs(x+1,y)
		dfs(x-1,y)
		dfs(x,y+1)
		dfs(x,y-1)
		house_cnt += 1

for _ in range(n):
	map_.append(list(map(int, input())))
m = len(map_[0])

for x in range(n):
	for y in range(m):
		house_cnt = 0
		if map_[x][y] == 1:
			area_cnt += 1
			dfs(x,y)
			house_cnts.append(house_cnt)

print(area_cnt)
for cnt in sorted(house_cnts):
	print(cnt)
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.