[BOJ]๋ฐฑ์ค€#11448 Silver 3 Ga ๐Ÿ†—๐Ÿ†™ (Python, ํŒŒ์ด์ฌ)

์ž„์ค€์„ฑยท2022๋…„ 8์›” 7์ผ
0

๋ฐฑ์ค€ Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
39/59
post-thumbnail

๋ฐฑ์ค€ 11448๋ฒˆ
https://www.acmicpc.net/problem/11448

๋ฌธ์ œ



ํ›„๊ธฐ

โฐ ํ’€์ด์‹œ๊ฐ„ 30๋ถ„ ++โฐ

๋งžํžŒ ์‚ฌ๋žŒ์ด ๋งŽ์ง€ ์•Š์€ ๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ํ’€์€ ์‚ฌ๋žŒ์ด ์ ์€ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์„œ ์ฐพ์€ ๋ฌธ์ œ๋‹ค.

์˜์–ด๋กœ ๋˜์–ด์žˆ์–ด ๊ฝค(?) ์˜ค๋žœ ์‹œ๊ฐ„์— ๊ฑธ๋ ค ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ’€๊ธฐ ์‹œ์ž‘ํ•œ ๋ฌธ์ œ๋‹ค.

๊ธฐ๋ณธ์ ์ธ ํ‹€์€ ๊ธฐํƒ€ DFS ๋ฌธ์ œ๋“ค๊ณผ ๊ฐ™์œผ๋ฉฐ, ์ƒํ•˜์ขŒ์šฐ๋Œ€๊ฐ์„ ์„ ํƒ์ƒ‰ํ•œ๋‹ค.

W๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด W๊ฐ€ ๋‹ค๋ฅธ ๋•…์œผ๋กœ ๋ป—์–ด ๋‚˜๊ฐ€๋Š”๋ฐ( ๊ฐ์—ผ์‹œํ‚ค๋“ฏ์ด )

์ด๋กœ ์ธํ•ด w๊ฐ€ ๋ช‡๊ฐœ์˜ "-" ํ•˜์ดํฐ์„ ์ „์—ผ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”๊ฐ€์— ๋Œ€ํ•œ ๋ฌธ์ œ๋‹ค.

"w"๋ฅผ ๋งŒ๋‚˜๋ฉด dfs๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  , ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•˜๋ฉฐ , ์ตœ์ข…์ ์œผ๋กœ ๋ช‡๊ฐœ์˜ ํ•˜์ดํฐ์„ w๋กœ ๋ฐ”๊ฟจ๋Š”์ง€

์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

๋‚˜์˜ ํ’€์ด

import sys
input= sys.stdin.readline
sys.setrecursionlimit(10**7)

dx = [-1,-1,-1,0,0,1,1,1] #์ƒํ•˜์ขŒ์šฐ ๋Œ€๊ฐ์„ 
dy = [-1,0,1,-1,1,-1,0,1]

def dfs(x,y):
    global result
    if x<=-1 or x>=N or y<=-1 or y>=N:
        return False

    for i in range(8): 
        nx = x + dx[i]
        ny = y + dy[i]

        if nx<=-1 or nx>=N or ny<=-1 or ny>=N:
            continue
        
 
        if graph[nx][ny]=="-": #ํ•˜์ดํฐ์„ ๋งŒ๋‚˜๋ฉด
            result+=1
            graph[nx][ny] ="w" #w๋กœ ๋ฐ”๊พธ๋ฉฐ, ๊ฒฐ๊ณผ๊ฐ’์ด 1 ์ฆ๊ฐ€๋œ๋‹ค. 
            dfs(nx,ny)
            
    return True
        
T = int(input())
for _ in range(T):
    N = int(input())
    graph = []
    result = 0
    for _ in range(N):
        graph.append(list(map(str,input().rstrip())))
    visited = [[False] * N for _ in range(N)]
    for i in range(N):
        for j in range(N):
            if graph[i][j]=="w" and not visited[i][j] : #dfsํ›„ ๊ฒฐ๊ณผ์ถœ๋ ฅ
                dfs(i,j)
    print(result)
profile
์•„๋ฌด๋ตํฌ ์žˆ์ด

0๊ฐœ์˜ ๋Œ“๊ธ€