[BOJ]๋ฐฑ์ค€#4993 Silver 1 Red and Black โฌ›๐ŸŸฅ (Python, ํŒŒ์ด์ฌ)

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

๋ฐฑ์ค€ Algorithm

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

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

๋ฌธ์ œ



ํ›„๊ธฐ

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

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

์ฐพ์€ ๋ฌธ์ œ์˜ 2๋ฒˆ์งธ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์˜์–ด๋กœ ๋˜์–ด์žˆ๋Š” ๋ฌธ์ œ๋ผ ์šฐ์„  ์ž…์ถœ๋ ฅ์„ ๋ด์„œ ๊ฐ์„ ์žก๊ณ  ๋ฌธ์ œ์˜ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

๋ฌธ์ œ์˜ ๊ฒฐ๋ก ์„ ์ด์•ผ๊ธฐ ํ•˜์ž๋ฉด,
"@" ๊ฐ€ ๊ทธ๋ž˜ํ”„๋ฅผ ๋Œ์•„๋‹ค๋‹ˆ๋ฉฐ ๋ช‡๊ฐœ์˜ "."์„ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€

์— ๊ด€ํ•œ ๋ฌธ์ œ๋‹ค. ** ๋‹จ, @ ๋ณธ์ธ๋„ ๋ฐฉ๋ฌธํ•œ ํšŸ์ˆ˜์— ํฌํ•จํ•œ๋‹ค. << ๊ฒฐ๊ณผ๊ฐ’์€ ํ•ญ์ƒ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

@๋ฅผ ๋งŒ๋‚˜๋ฉด DFS๊ฐ€ ์‹œ์ž‘๋˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ ๋ช‡๊ฐœ์˜ "."์„ ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ

์ถœ๋ ฅํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ๋‹ค.

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

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

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

def dfs(x,y):
    global result
    visited[x][y] = True #@๋ฅผ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹œ์ž‘

    for i in range(4): #์ƒํ•˜์ขŒ์šฐ
        nx = x + dx[i]
        ny = y + dy[i]
        if nx<=-1 or nx>=M or ny<=-1 or ny>=N or graph[nx][ny] =="#" or graph[nx][ny] =="@": # #์œผ๋กœ ๋ง‰ํ˜€์žˆ๊ฑฐ๋‚˜, ๋งต์„๋‚˜๊ฐ€๊ฑฐ๋‚˜, @๋ฅผ ๋งŒ๋‚˜๋ฉด DFS๋Š” ์‹คํ–‰๋˜์ง€์•Š์Œ
            continue

        if graph[nx][ny] =="." and not visited[nx][ny]: #.์„ ๋งŒ๋‚ฌ๊ณ  ๋ฐฉ๋ฌธํ•œ์ ์—†์œผ๋ฉด
            visited[nx][ny] == True #๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
            dfs(nx,ny) #DFS์‹œ์ž‘
            result+=1 #๊ฒฐ๊ณผ๊ฐ’ ์ฆ๊ฐ€

    return True

        
while True:
    N , M = map(int,input().split())
    result = 0
    if N == 0 and M==0:
        break
    graph = []
    visited= [[False]* N for _ in range(M)]
    for _ in range(M):
        graph.append(list(map(str,input().rstrip())))
    for i in range(M):
        for j in range(N):
            if graph[i][j]=="@" and not visited[i][j]: #@๋ฅผ ๋งŒ๋‚˜๋ฉด ์‹œ์ž‘๋œ๋‹ค.
                dfs(i,j)
                visited[i][j]= True
    
    print(result+1) #@๊นŒ์ง€ ํฌํ•จํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฒฐ๊ณผ๊ฐ’ 1 ์ฆ๊ฐ€
profile
์•„๋ฌด๋ตํฌ ์žˆ์ด

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