[BOJ][๐ŸŸก5][๋ฐฑ์ค€#10026] ์ ๋ก์ƒ‰์•ฝ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #10026


๋ฌธ์ œ

์ ๋ก์ƒ‰์•ฝ์€ ๋นจ๊ฐ„์ƒ‰๊ณผ ์ดˆ๋ก์ƒ‰์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋Š๋ผ์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ์€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ๊ณผ๋Š” ์ข€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ํฌ๊ธฐ๊ฐ€ 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๋กœ ๋Š˜์—ˆ๋‹ค. ์กฐ๊ธˆ์”ฉ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์ด ๋” ๋“œ๋‚˜๋ณด๋‹ค.

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ