๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š Algorithm/Baekjoon

[Baekjoon] ๋ฐฑ์ค€ 10026 '์ ๋ก์ƒ‰์•ฝ' ๋ฌธ์ œํ’€์ด ํŒŒ์ด์ฌ, Python, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ

๐Ÿ“ 10026 ๋ฌธ์ œ

์ ๋ก์ƒ‰์•ฝ์€ ๋นจ๊ฐ„์ƒ‰๊ณผ ์ดˆ๋ก์ƒ‰์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋Š๋ผ์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ์€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ๊ณผ๋Š” ์ข€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

ํฌ๊ธฐ๊ฐ€ N×N์ธ ๊ทธ๋ฆฌ๋“œ์˜ ๊ฐ ์นธ์— R(๋นจ๊ฐ•), G(์ดˆ๋ก), B(ํŒŒ๋ž‘) ์ค‘ ํ•˜๋‚˜๋ฅผ ์ƒ‰์น ํ•œ ๊ทธ๋ฆผ์ด ์žˆ๋‹ค. ๊ทธ๋ฆผ์€ ๋ช‡ ๊ฐœ์˜ ๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋Š”๋ฐ, ๊ตฌ์—ญ์€ ๊ฐ™์€ ์ƒ‰์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๋˜, ๊ฐ™์€ ์ƒ‰์ƒ์ด ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ๋‘ ๊ธ€์ž๋Š” ๊ฐ™์€ ๊ตฌ์—ญ์— ์†ํ•œ๋‹ค. (์ƒ‰์ƒ์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋Š๋ผ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๊ฐ™์€ ์ƒ‰์ƒ์ด๋ผ ํ•œ๋‹ค)

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ทธ๋ฆผ์ด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—

RRRBB
GGBBB
BBBRR
BBRRR
RRRRR

์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ ๊ตฌ์—ญ์˜ ์ˆ˜๋Š” ์ด 4๊ฐœ์ด๋‹ค. (๋นจ๊ฐ• 2, ํŒŒ๋ž‘ 1, ์ดˆ๋ก 1) ํ•˜์ง€๋งŒ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์€ ๊ตฌ์—ญ์„ 3๊ฐœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. (๋นจ๊ฐ•-์ดˆ๋ก 2, ํŒŒ๋ž‘ 1)

๊ทธ๋ฆผ์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ์™€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ ๊ตฌ์—ญ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.



 

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 100)

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ ์ค„์—๋Š” ๊ทธ๋ฆผ์ด ์ฃผ์–ด์ง„๋‹ค.

 

 

์ถœ๋ ฅ

์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ์˜ ๊ตฌ์—ญ์˜ ๊ฐœ์ˆ˜์™€ ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ์˜ ๊ตฌ์—ญ์˜ ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๐Ÿง ํ’€์ด

 

๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์—ˆ๋‹ค. 

 

xx์™€ yy๋ฅผ ๋‘์–ด ์ƒํ•˜์ขŒ์šฐ๋ฅผ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๊ณ  DFS๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค. 

์ ๋ก์ƒ‰์•ฝ์˜ ํŠน์ง•์— ๋”ฐ๋ผ Red์™€ Green์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†๋Š” (๊ฐ™์€ ์ƒ‰์œผ๋กœ ๋ณด์ด๋Š”) ๊ฒฝ์šฐ๋“ค์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ธฐ์กด ๊ทธ๋ž˜ํ”„์—์„œ ์ดˆ๋ก์ƒ‰(G)์ด๋ฉด ๋นจ๊ฐ„์ƒ‰(R)์œผ๋กœ ๋ฐ”๊พธ์–ด ์ฃผ์—ˆ๋‹ค. 

 

์ฒ˜์Œ์— ์žฌ๊ท€๋ฅผ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•˜๊ณ  ๊ทธ๋ƒฅ ์ œ์ถœํ–ˆ๋”๋‹ˆ '๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ' ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. sys.setRecursion ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. 

 

import sys
sys.setrecursionlimit(10**5)

N = int(input())
graph = []
visited = [[False] * N for _ in range(N)]
normal_count = 0
disabled_count = 0
for _ in range(N):
    graph.append(list(input().rstrip()))
    
xx = [0, 0, 1, -1]
yy = [1, -1, 0, 0]

def dfs(x, y) :
    visited[x][y] = True
    color = graph[x][y]        
    for i in range(4) :
        nx = x + xx[i]  
        ny = y + yy[i]
        if (0 <=nx < N) and (0 <= ny < N) :
            if visited[nx][ny] == False :   
                if graph[nx][ny] == color : 
                    dfs(nx, ny)
                    
for i in range(N) :
    for j in range(N) :
        if visited[i][j] == False :
            dfs(i, j)
            normal_count += 1            
print(normal_count)

for i in range(N) :
    for j in range(N) :
        if graph[i][j] == 'G' :
            graph[i][j] = 'R'
            
visited = [[False] * N for _ in range(N)]

for i in range(N) :
    for j in range(N) :
        if visited[i][j] == False :
            dfs(i, j)
            disabled_count += 1  
print(disabled_count)
 

 

 

 

728x90