Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[python3] ์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค - ์Œ๋ฃŒ์ˆ˜ ์–ผ๋ ค ๋จน๊ธฐ (ch5. DFS/BFS)

๊ฐ์ž ๐Ÿฅ” 2021. 6. 22. 18:42
๋ฐ˜์‘ํ˜•

์ฐธ๊ณ ) ์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ ์ฑ…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋œ ๋ฌธ์ œ์™€ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. 
๋”ฐ๋ผ์„œ ๋ฌธ์ œ๋Š” ์ž์„ธํ•˜๊ฒŒ ์ ์ง€ ์•Š๊ณ , ๊ฐ„๋‹จํ•œ ์„ค๋ช…๊ณผ ์ œ ์ฝ”๋“œ๋งŒ ์˜ฌ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์‹ค์ „๋ฌธ์ œ(1) ์Œ๋ฃŒ์ˆ˜ ์–ผ๋ ค๋จน๊ธฐ

- N x M ํฌ๊ธฐ์˜ ์–ผ์Œํ‹€
- ๊ตฌ๋ฉ์นธ 0 ์นธ๋ง‰์ด์นธ 1
- ๊ตฌ๋ฉ์ด ๋šซ๋ ค์žˆ๋Š” ๋ถ€๋ถ„๋ผ๋ฆฌ ์ƒํ•˜์ขŒ์šฐ๋กœ ๋ถ™์–ด์žˆ๋Š” ๊ฒฝ์šฐ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ„์ฃผ
- ์–ผ์Œํ‹€์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ƒ์„ฑ๋˜๋Š” ์•„์ด์Šคํฌ๋ฆผ์˜ ์ด ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ

##### ์ž…๋ ฅ์กฐ๊ฑด
- ์ฒซ์จ‹์ค„์— ์–ผ์Œํ‹€์˜ ์„ธ๋กœ N ๊ฐ€๋กœ M ์ฃผ์–ด์ง
- 1<= N, M <= 1000
- ๋‘๋ฒˆ์งธ ์ค„ ๋ถ€ํ„ฐ N+1์ค„๊นŒ์ง€ ์–ผ์Œํ‹€์˜ ํ˜•ํƒœ ์ฃผ์–ด์ง
- ๊ตฌ๋ฉ์ด ๋šซ๋ ค์žˆ๋Š” ๋ถ€๋ถ„์€ 0 ๊ทธ๋ ‡์ง€์•Š์€ ๋ถ€๋ถ„ 1

 

<๋ฌธ์ œ ํ’€์ด >

1. DFS ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค. (DFS/BFS ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•ด์•ผํ•˜๋Š”์ง€ ์•„์ง ๊ฐ์ด ์•ˆ์˜จ๋‹ค.)
2 . ์ฒ˜์Œ (0,0)๋ถ€ํ„ฐ ๋ฐฉ๋ฌธ์„ ์‹œ์ž‘
3. (0,0) ์ƒํ•˜์ขŒ์šฐ์— ๊ตฌ๋ฉ์ด๋šซ๋ ค์žˆ๋Š”(0) ๊ณณ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
4. ๋งŒ์•ฝ ๊ตฌ๋ฉ์ด ๋šซ๋ ค ์žˆ๋‹ค๋ฉด ๋šซ๋ ค์žˆ๋Š” ๊ณณ์„ 1๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. (๋ฐ”๊ฟ”์ฃผ์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ์— ๋˜ ๊ฐฏ์ˆ˜๋ฅผ ์„ธ๊ธฐ ๋–„๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–ด์จ‹๋“  (0,0)๊ณผ ์—ฐ๊ฒฐ๋œ ๊ณณ์ด๊ธฐ ๋•Œ๋ฌธ์— 1๋ฒˆ๋งŒ ์„ธ์–ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, (0,0)๊ณผ ์ธ์ ‘ํ•œ ๋ชจ๋“  0์€ 1๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์ด๋‹ค~)
5. ์ตœ์ข… ๊ฐ’์œผ๋กœ True๋ฅผ ์ถœ๋ ฅํ•  ๊ฒƒ์ด๋‹ค. ๋‚˜์ค‘์— True์ธ ๊ฒƒ๋งŒ ์นด์šดํŠธ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค.

 

<๋‚ด๊ฐ€ ํ‘ผ ์ฝ”๋“œ ๋ฐ ๋‹ต์•ˆ ์˜ˆ์‹œ ์ฝ”๋“œ>

DFS ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•ด์•ผํ• ์ง€ ๋ชฐ๋ผ์„œ ๋‹ต์•ˆ์„ ์ฐธ๊ณ ํ•˜๋ฉฐ ํ’€์—ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค. ๋„ˆ๋ฌด ์–ด๋ ต๋‹ค.. ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ ‘ํ•ด๋ณด๋ฉด์„œ ๊ฐ์„ ์žก๋Š”๊ฒŒ ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

#์ž…๋ ฅ๋ฐ›๋Š” ์ฝ”๋“œ
n, m = map(int, input().split())
graph = []
for i in range(n):
    graph.append(list(map(int, input())))
    
# ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•œ dfs ๋กœ ๊ตฌํ˜„ํ•˜๋Š”๊ฒƒ์ด tip
def dfs(x, y):
    # ๋“ค์–ด์˜ค๋Š” ์ˆ˜ xy๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ๊ทธ๋ƒฅ ๋ฐ”๋กœ false์ฒ˜๋ฆฌ
    if x >= n or y >= m or x < 0 or y < 0:
        return False
    
    #๋ฐฉ๋ฌธ๋…ธ๋“œ ํ™•์ธ
    if graph[x][y] == 0:
        #๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
        graph[x][y] = 1
        #๊ทธ๋‹ค์Œ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์ƒํ•˜์ขŒ์šฐ๊ฐ€ 0์ด๋ฉด 1๋กœ ๋˜ ๋ฐ”๊พธ์–ด์ฃผ๋ฉด์„œ ๋ฐฉ๋ฌธํ•ด์•ผํ•ด
        # ์ด๋•Œ ๋‹ค์‹œ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์ง€ ๋ง๊ณ  ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•˜์ž
        dfs(x-1, y) #์ƒ
        dfs(x+1, y) #ํ•˜
        dfs(x, y-1) #์ขŒ
        dfs(x, y+1) #์šฐ
        return True # 0์ด๋‹ˆ๊นŒ true๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค
    return False #0์ด ์•„๋‹ˆ๋‹ˆ๊นŒFalse๋กœ...

# ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ™•์ธํ•ด๋ณด๊ธฐ
result = 0
for i in range(n):
    for j in range(m):
        if dfs(i,j) == True:
            result += 1
            
print(result)
  • ์ถœ๋ ฅ

์ฒซ์จ‹์ค„ : N M ์ž…๋ ฅ๋ฐ›์Œ
๋‘˜์จ‹์ค„ ๋ถ€ํ„ฐ N+1๋ฒˆ์จ‹ ์ค„๊นŒ์ง€๋Š” 1๊ณผ 0์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค
์…‹์จ‹์ค„ : ์ตœ์ข… ์ถœ๋ ฅ๊ฐ’์ด๋‹ค

 

 

์•„ ... ์–ด๋ ต๋‹ค ใ… ใ… ใ…  ๋ฌธ์ œ๋ฅผ ๋งŽ์ด ํ’€์–ด๋ณด๋ฉด์„œ ์ต์ˆ™ํ•ด์ ธ์•ผ๊ฒ ๋‹ค.

๋ฐ˜์‘ํ˜•