[BOJ][๐ก5][๋ฐฑ์ค#10026] ์ ๋ก์์ฝ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์ ๋ก์์ฝ์ ๋นจ๊ฐ์๊ณผ ์ด๋ก์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ์ ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ๊ณผ๋ ์ข ๋ค๋ฅผ ์ ์๋ค. ํฌ๊ธฐ๊ฐ NรN์ธ ๊ทธ๋ฆฌ๋์ ๊ฐ ์นธ์ R(๋นจ๊ฐ), G(์ด๋ก), B(ํ๋) ์ค ํ๋๋ฅผ ์์น ํ ๊ทธ๋ฆผ์ด ์๋ค. ๊ทธ๋ฆผ์ ๋ช ๊ฐ์ ๊ตฌ์ญ์ผ๋ก ๋๋์ด์ ธ ์๋๋ฐ, ๊ตฌ์ญ์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋, ๊ฐ์ ์์์ด ์ํ์ข์ฐ๋ก ์ธ์ ํด ์๋ ๊ฒฝ์ฐ์ ๋ ๊ธ์๋ ๊ฐ์ ๊ตฌ์ญ์ ์ํ๋ค. (์์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ๊ฐ์ ์์์ด๋ผ ํ๋ค) ์๋ฅผ ๋ค์ด, ๊ทธ๋ฆผ์ด ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์
RRRBB GGBBB BBBRR BBRRR RRRRR ์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ ์ด 4๊ฐ์ด๋ค. (๋นจ๊ฐ 2, ํ๋ 1, ์ด๋ก 1) ํ์ง๋ง, ์ ๋ก์์ฝ์ธ ์ฌ๋์ ๊ตฌ์ญ์ 3๊ฐ ๋ณผ ์ ์๋ค. (๋นจ๊ฐ-์ด๋ก 2, ํ๋ 1) ๊ทธ๋ฆผ์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. (1 โค N โค 100) ๋์งธ ์ค๋ถํฐ N๊ฐ ์ค์๋ ๊ทธ๋ฆผ์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ๊ฐ์์ ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ์๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.
์์
์ ๋ ฅ
5
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
์ถ๋ ฅ
4 3
My Sol
import sys
limit_number = 10000
sys.setrecursionlimit(limit_number)
input = sys.stdin.readline
def func(mat, C, ni, nj):
global N
if 0<=ni<N and 0<=nj<N:
if mat[ni][nj]==C:
mat[ni][nj] = 'N'
didj = [(0,-1),(0,1),(1,0),(-1,0)]
for di, dj in didj:
func(mat, C, ni+di, nj+dj)
return
N = int(input())
mat1 = [list(input()) for _ in range(N)]
mat2 = []
for lst in mat1:
mat2.append([])
for i in lst:
k = 'B' if i=='B' else 'R'
mat2[-1].append(k)
cnt1 = cnt2 = 0
for i in range(N):
for j in range(N):
if not mat1[i][j]=='N':
func(mat1, mat1[i][j], i, j)
cnt1 += 1
if not mat2[i][j]=='N':
func(mat2, mat2[i][j], i, j)
cnt2 += 1
print(cnt1, cnt2)
์ฌ๊ทํจ์๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ๋ฐ ์ต๋ 100x100, ์ฆ 1๋ง ๋ฒ์ depth๊น์ง ๋๋ฌํด์ผ ํ ์ ์์ผ๋ฏ๋ก sys ๋ชจ๋์ importํด์ recursivelimit์ 10000์ผ๋ก ์ค์ ํ์ฌ RecursionError๋ฅผ ํด๊ฒฐํ์๋ค. ๋ํ ์ ๋ ฅ์ด ๋ง์ด ๋ค์ด์ค๋ ๊ฒฝ์ฐ ๋ ๋น ๋ฅธ ์ ๋ ฅ์ ์์ฉ์ ์ํด readline์ ์ฌ์ฉํ์๋ค.
N์ ์ ๋ ฅ๋ฐ๋๋ฐ, (0,0)์ ๊ฐ๋ถํฐ ์์ํ์ฌ ์ฐ์ ์ด ์นธ์ ๊ฐ์ N์ผ๋ก ๋ฐ๊ฟ์ค๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ธฐ์ค์นธ์ผ๋ก๋ถํฐ ์ํ์ข์ฐ๊ฐ ์ด ๊ฐ, ์ฆ ๊ฐ์ ์์ด๋ผ๋ฉด ์ญ์ N์ผ๋ก ๋ฐ๊ฟ์ค๋ค. ๋ง์ฝ ๋ฒ์๋ฅผ ๋ฒ์ด๋๊ฑฐ๋ ๊ฐ์ ์์ด ์๋๊ฑฐ๋ N์ด๋ผ๋ฉด ์ฌ๊ท์์ return๋์ด ๋์๊ฐ์ผ ํ๋ค. ๋๋ฌธ์ ๋ฒ์ ๋ด๋ถ์ธ ni, nj์ด๊ณ ์๋ ์ฒ์ ์กฐํ์๊ณผ ๊ฐ์ ์นธ์ธ ๊ฒฝ์ฐ๋ง N์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ฒ ๋๋ค.
์ ๋ก์๋งน์ ๊ฒฝ์ฐ RGB์์ RG์ B๋ง ๊ตฌ๋ถํ๋ฉด ๋๋ฏ๋ก ์ ๋ ฅ๋ฐ์ mat1์ ๊ฐ ํญ๋ชฉ์ ๋ํด ์กฐ๊ฑด๋ฌธ์ ๊ฑธ์ด์ฃผ์ด G๋ฅผ R๋ก ๋ฐ๊ฟ์ฃผ๊ณ R๊ณผ B๋ง ์กด์ฌํ๋ 2์ฐจ์ ๋ฐฐ์ด์ ๋ฐ๋ก ๋ง๋ค์ด ๊ฐ์ ํจ์๋ฅผ ์ ์ฉํ์๋ค. ์กฐ๊ฑด์ ์ ๋ก์๋งน๊ณผ ์ผ๋ฐ์ ๊ฒฝ์ฐ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ์กฐ๊ฑด์ ์ฐพ์ ์๋ ์์์ง๋ง, ์๊ฐ์ ์ผ๋ก๋ ํฌ๊ฒ ์ํด๋ฅผ ๋ณด์ง ์๊ณ ๋๋ฆ ์ง๊ด์ ์ด๊ธฐ ๋๋ฌธ์ ๋ณ๋์ mat2๋ฅผ ๋ง๋ค์๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
ํจ์ ๋ด๋ถ์ ์ํ์ข์ฐ ์ฌ๊ทํจ์๋ฅผ ํธ์ถํ ๋ ์ฒ์๋ถํฐ for๋ฌธ์ ์ฌ์ฉํ ๊ฒ์ ์๋๊ณ ๊ฐ ๋ธํ์ ๋ํด 4๋ฒ์ ์ฝ๋๋ฅผ ๋ฐ๋ก ์ค์ ํด์ฃผ์์ผ๋, ์ ๋ ๊ฒ for๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ํจ์ถํ ์ ์์ ๊ฒ ๊ฐ์ ์์ ํ์๋ค. ๊ทธ๋ฐ๋ฐ ์ฐ์ฐ์๊ฐ์ 96ms์์ 108ms๋ก ๋์๋ค. ์กฐ๊ธ์ฉ ์ฒ๋ฆฌํ๋ ์๊ฐ์ด ๋ ๋๋๋ณด๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ