๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ’ป๐Ÿ’ญ๐ŸŽง๐ŸŒ

BOJ 1926 : ๊ทธ๋ฆผ (Python) ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€ ํ’€์ด

BOJ 1926 : ๊ทธ๋ฆผ (Python)

adorableco 2023. 3. 13. 20:37
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

https://www.acmicpc.net/problem/1926

 

1926๋ฒˆ: ๊ทธ๋ฆผ

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

www.acmicpc.net

 

 

์ฝ”๋“œ

import sys
sys.setrecursionlimit(10**7)

def dfs(x,y):
    global temp
    if x<=-1 or x>=n or y<=-1 or y>=m:
        return False
    if graph[x][y] == 1:
        graph[x][y] = 0
        dfs(x-1,y)
        dfs(x,y-1)
        dfs(x+1,y)
        dfs(x,y+1)
        temp += 1
        return True
    return False

n,m = map(int, input().split())

graph = []
for i in range(n):
    graph.append(list(map(int, input().split())))

result = 0    
maximum = 0
for i in range(n):
    for j in range(m):
        temp = 0
        if dfs(i, j) == True:
            result += 1
            if maximum < temp:
                maximum = temp
print(result)
print(maximum)

 

 

ํ’€์ด

 

์ด์ฝ”ํ…Œ ๊ฐ•์˜์—์„œ ๋‚˜์˜จ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•ด์„œ ๊ทธ ์ฝ”๋“œ์—์„œ ์ข€๋งŒ ๋” ์ถ”๊ฐ€ํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค... ๋‹ค์‹œ ๊ธฐ์–ตํ•ด๋‚ด์„œ ํ˜ผ์žํ•ด๋ณด๋ ค๋‹ˆ๊นŒ ๊ธฐ์–ต์ด ์•ˆ๋‚˜๋”๋ผ.. ๋ณต์Šตํ•ด์•ผํ•˜๋Š”๋ฐ...

 

1์ด ๋ถ™์–ด์žˆ๋Š” ๊ฒƒ๋“ค์ด ๊ทธ๋ฆผ์— ํ•ด๋‹นํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ•œ ์›์†Œ๋ฅผ ๊ธฐ์ ์œผ๋กœ ์ƒํ•˜์ขŒ์šฐ์— 1์ด ์žˆ์œผ๋ฉด ๊ทธ๋ฆผ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋ฉด ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ DFS๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋“  ์›์†Œ๋ฅผ ํ™•์ธํ•ด๋ณธ๋‹ค.

 

dfs ๋ฉ”์†Œ๋“œ๊ฐ€ True๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด(graph[i][j]๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฃผ๋ณ€์˜ ๊ทธ๋ฆผ ์—ฌ๋ถ€ ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด) result ๋ผ๋Š” ๋ณ€์ˆ˜์—๋Š” 1์„ ๋”ํ•ด์„œ ๊ทธ๋ฆผ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ์ธก์ •ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  dfs ํƒ์ƒ‰์ด ํ•œ๋ฒˆ ๋๋‚  ๋•Œ๋งˆ๋‹ค temp ๋ผ๋Š” ๋ณ€์ˆ˜์— 1์„ ๋”ํ•ด์„œ ๊ทธ๋ฆผ์˜ ํฌ๊ธฐ๋ฅผ ์ธก์ •ํ•œ๋‹ค.

maximum ๋ณ€์ˆ˜๊ฐ€ temp๋ณด๋‹ค ์ž‘์œผ๋ฉด maximum์— temp ๊ฐ’์„ ๋Œ€์ž…ํ•ด์„œ ๊ฐ€์žฅ ํฐ ๊ทธ๋ฆผ์˜ ํฌ๊ธฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. 

 

์ฒ˜์Œ์— ๋ฐฑ์ค€์—์„œ Recursive error๊ฐ€ ๋‚ฌ์—ˆ๋Š”๋ฐ ํŒŒ์ด์ฌ์˜ ์žฌ๊ท€ ํ•œ๋„๋ฅผ ๋„˜์–ด์„œ์„œ ์ƒ๊ธด ์˜ค๋ฅ˜๋ผ๊ณ  ํ•œ๋‹ค. ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ

sys.setrecursionlimit(10**7)

์œ„์™€ ๊ฐ™์ด ์žฌ๊ท€ ํ•œ๋„๋ฅผ ๋Š˜๋ ค์ฃผ๋ฉด ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ๋ญ”๊ฐ€ ์–ต์ง€๋กœ ์ฝ”๋“œ๊ฐ€ ๋Œ์•„๊ฐ€๋„๋ก ๋งŒ๋“  ๋Š๋‚Œ์ด๋‚˜ ... ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์ƒ๊ฐ์ด ์•ˆ๋‚œ๋‹ค.

๋ฐ˜์‘ํ˜•