https://www.acmicpc.net/problem/10026
๊ตฌ์ญ์ ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ๊ทผ๋ฐ ์ด์ ์์ฝ์ ๊ณ๋ค์ธ
dfs๋ bfs ์ค ํ๋๋ฅผ ํํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด ๋๋ค.
ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด ์ ๋ง ๋ค์ํ์ง๋ง ๊ทธ์ค ํ๋๋ง ์์ฑํจ.
๋ฌธ์ ํ์ด
์ด ๋ฌธ์ ๋ ์์ฝ์ผ๋์ ์์ฝ์ด ์๋ ๋ ๊ฐ๊ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ ํ์ด๊ฐ ๋ค๋ฅผ ๊ฒ์ด๋ค.
๋๋ ๋ฐฐ์ด์ ๋ณต์ฌํด์ ์์ฝ์ผ ๋(R == G) ๋ฐ๋ก ํจ์๋ฅผ ๋ง๋ค์ด ํ์ํ๋๋ก ๋ง๋ค์๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ์์ฝ์ด ์๋ ๊ฒฝ์ฐ ํ์์ ํด์ฃผ๊ณ
์๋ ๋ฐฐ์ด์์ R์ G๋ก ๋ณ๊ฒฝ(๋๋ G๋ฅผ R๋ก) ํ ํ์์ ๋ ํด์ฃผ๋ฉด ๋๋ค.
์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ค๋ ๊ฒ์ ๋ํ๋ด๊ธฐ ์ํด visited ๋ฐฐ์ด์ ๋ฐ๋ก ๋ง๋ค์ง ์๊ณ
๊ทธ๋ฅ ์๋ ๋ฐฐ์ด์์ ๋ฌธ์๋ฅผ R, G, B๊ฐ ์๋ ๋ค๋ฅธ ๋ฌธ์(Z)๋ก ๋ณ๊ฒฝ์ํค๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์๋ค.
์ ์ฒด ์ฝ๋
import sys
import copy
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
N = int(input())
rg_count = 0
r_count = 0
g_count = 0
b_count = 0
greed = []
for _ in range(N):
greed.append(list(map(str,input().rstrip())))
rg_greed = copy.deepcopy(greed)
def RedGreenEqual(x,y):
if x < 0 or x >= N or y < 0 or y >= N:
return False
if rg_greed[x][y] == 'R' or rg_greed[x][y] == 'G':
rg_greed[x][y] = 'Z'
RedGreenEqual(x + 1, y)
RedGreenEqual(x - 1, y)
RedGreenEqual(x, y + 1)
RedGreenEqual(x, y - 1)
return True
return False
def ColorArea(x,y,color):
if x < 0 or x >= N or y < 0 or y >= N:
return False
if greed[x][y] == color:
greed[x][y] = 'Z'
ColorArea(x + 1, y, color)
ColorArea(x - 1, y, color)
ColorArea(x, y + 1, color)
ColorArea(x, y - 1, color)
return True
return False
for i in range(N):
for j in range(N):
if ColorArea(i,j,'R') == True:
r_count += 1
if ColorArea(i,j,'G') == True:
g_count += 1
if ColorArea(i,j,'B') == True:
b_count += 1
for i in range(N):
for j in range(N):
if RedGreenEqual(i,j) == True:
rg_count += 1
print(r_count + g_count + b_count, rg_count + b_count)
์ฃผ์ํ ์ ์ 2์ฐจ์ ๋ฐฐ์ด์ ๋ณต์ฌํ ๋ deepcopy๋ก ๋ณต์ฌํด์ค์ผ ํ๋ค.
๋ํ sys.setrecursionlimit๋ก ์ฌ๊ท ๊น์ด ์ ํ์ ๋๋ ค์ค์ผ ํ๋ค.
๊ธฐ์กด ์ฌ๊ท ๊น์ด(1000)๋ก๋ RecursionError๋ธ.
๋ค์ผ๋ก ์ถ๊ฐํ๋ฉด ๊ฐ์ ์ฝ๋์ธ๋ฐ pypy์์๋ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฌ๋ค.
์ฐพ์๋ณด๋๊น pypy์์๋ ์ฌ๊ท์ ์ฝํ๋ค๊ณ ํจ
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11404 ํ๋ก์ด๋ (python ํ์ด์ฌ) (0) | 2022.06.18 |
---|---|
[๋ฐฑ์ค] 17070 ํ์ดํ ์ฎ๊ธฐ๊ธฐ 1 (python ํ์ด์ฌ) (0) | 2022.06.16 |
[๋ฐฑ์ค] 1655 ๊ฐ์ด๋ฐ๋ฅผ๋งํด์ (python ํ์ด์ฌ) (0) | 2022.06.14 |
[๋ฐฑ์ค] 7569 ํ ๋งํ (python ํ์ด์ฌ) (0) | 2022.06.14 |
[๋ฐฑ์ค] 13549 ์จ๋ฐ๊ผญ์ง3 (python ํ์ด์ฌ) (0) | 2022.06.13 |