[BOJ][๐ก3][๋ฐฑ์ค#16988] Baaaaaaaaaduk2 (Easy)
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold III
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์๊ธฐ 2116๋ , ์ธ๊ฐ์ย ๋ ์ด์ AI์ ์๋๊ฐ ๋์ง ๋ชปํ๊ฒ ๋์๋ค. ๊ทผ๋ ฅ, ์๋ฐ๋ ฅ, ์ฐฝ์๋ ฅ, ์ฌ๊ณ ๋ ฅ, ๋ฌธ์ ํด๊ฒฐ๋ฅ๋ ฅ, ์ฌ์ง์ด ์ธ๊ฐ๋ฏธ์กฐ์ฐจ AI๊ฐ ์ธ๊ฐ์ ์์ ๋ค. AI๊ฐ ์จ ์ง๊ตฌ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ ์ด๋ฏธ ์ธ๋ฅ๋ ์ง๊ตฌ์ ์ฃผ์ธ ์๋ฆฌ์์ ์ซ๊ฒจ๋์ง ์ค๋์ด๋ค. ๊ทธ๋๋ง ๋คํ์ธ ๊ฒ์ AI๊ฐ ์ธ๊ฐ์ ์ ๋์ ์ผ๋ก ๋ํ์ง ์๊ณ , ๋๋ฆฌ์ด AI๊ฐ ์์์ฌ๋ฆฐ ๋๋ถ์ ๊ธฐ์ ์ ๋ฐ์ ์ผ๋ก ๋ชจ๋ ์ฌ๋์ดย ๋ฌด์ ํ์ ์ธ ์ฌํ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์ด ํ ์ธ๊ธฐ ์ ์ ์ฌ๋๋ค์ด ๋ฐ๋ผ๋ ๋ ๋ง์ ๋ฐฑ์์ ๊ฐ์ ์ถ์ ๋๋ฆด ์ ์๊ฒ ๋๋ค๋ ์ฌ์ค์ด๋ค. ๋๋ค์์ ์ธ๊ฐ๋ค์ ํ์ฌ์ ์ํฉ์ ๋ง์กฑํ๊ณ ๋ ์ด์ ๋ฐ์ ์ ํฌ๊ธฐํ ์ฑ ๋๊ณ ๋จน์ผ๋ฉด์ ์๊ฐ์ ๋ณด๋ด๊ณ ์์ง๋ง ์ผ๋ถ ์ธ๊ฐ๋ค์ ์ธ๋ฅ์ ์๊ด์ ๋์ฐพ๊ธฐ ์ํด ์ ํญ๊ตฐ์ ์กฐ์งํด AI์๊ฒ ํฌ์ํ๊ณ ์๋ค. ์ ํญ๊ตฐ์ย AI์๊ฒ ์น์ฐ์ด ์๋ ์ข ๋ชฉ์ ์ฐพ๊ณ ์๋ค. ์ด๋ฌํ ์ข ๋ชฉ์ ๊ฐ์ง๊ณ AI์๊ฒ ์น๋ถ๋ฅผ ๊ฑธ์ด ์ ์ธ๋ฅ์๊ฒ ๋์ ์ ์ ๊ณผ ์ธ๊ฐ์ ์๋ํจ์ ์ฆ๋ช ํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ด๋ค. ์ ํญ๊ตฐ์ ์ง๋๋ถ๋ ๋ฌด๋ ค 12์๊ฐ์ ๊ฑธ์ณ AI์๊ฒ ์น์ฐ์ด ์๋ ์ข ๋ชฉ์ ์ฐพ๊ธฐ ์ํ ํ์๋ฅผ ์งํํ๋ค. ํ์์์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ๋๊ฒฐ, ๊ฐ์๋ถ๋ฐ์์ด๋ฒ๊ฐ์ ๋ง์ฉ๋ฌผ๊ณต๊ธฐ๋ณด์คํ์ง๋๋๋๋ฌด์ฌ๋๋ฑ ๊ฒ์, ์บ์น๋ง์ธ๋, ์๊น๊ธฐ, ์คํํฌ๋ํํธ, ๋ฅ ํผํ๊ธฐ ๊ฒ์, ๋ธ๊ธฐ 2๋นํธ, ๋ธ๊ธฐ์๋ฐ๋น๊ทผ์ฐธ์ธ๋ฉ๋ก ๊ฒ์, ๋ฐฑ์ผ์ฅ, ์ฌ์ ๋ํย ๋ฑ ๋ค์ํ ์์ด๋์ด๊ฐ ๋์์ง๋ง ๋จ 0.01%๋ผ๋ ์น์ฐ์ด ์์ด ๋ณด์ด๋ ์ข ๋ชฉ์ ํ๋๋ ์์๋ค. ๊ทธ๋ ๊ฒ ๋ชจ๋๊ฐ ๋๋ดํ๋ ์ค ๋๊ตฐ๊ฐ๊ฐ ์ญ์ฌ์ฑ ์ ๋ค์ ธ ์ธ๊ฐ์ด AI์๊ฒ ์น์ฐ์ด ์๋ ์ข ๋ชฉ์ ์ฐพ์๋๋ค. ๋ฐ๋ก ์ ํํ 100๋ ์ ์ ์์๋ ์ด์ธ๋๊ณผ ์ํ๊ณ ์ ๋ฐ๋ ๋๊ฒฐ์ด์๋ค. ๋ฌผ๋ก ์ํ๊ณ ๋ ๊ทธ ์ดํ๋ก ๋ฐ์ ์ ๊ฑฐ๋ญํ๊ธฐ์ ๋ฐ๋์์์ ์น์ฐ์ ์์ง๋ง ๋ฐ๋์ ๋ฃฐ์ ๋ณํํย Baduk2๋ผ๋ ์ข ๋ชฉ์์๋ ์ด์ธ๋์ด ์ํ๊ณ ์๊ฒ ํ ์ธํธ๋ฅผ ์ด๊ธด ๊ฒ๊ณผ ๊ฐ์ด ์ธ๊ฐ์ด AI์๊ฒ ์น์ฐ์ด ์๋ค๊ณ ํ๋จํ๋ค. Baduk2์ ๋ฃฐ์ ๋ฐ๋๊ณผ ๊ฑฐ์ ์ ์ฌํ์ง๋งย ์ ์ ์๊ฐ ๋์ 1๊ฐ์ฉ ๋ฒ๊ฐ์ ๋๋ ๊ฒ์ด ์๋๋ผ 2๊ฐ์ฉ ๋๋ค๋ ์ ์ด ๋ค๋ฅด๋ค. ์์ ์ ํธ์๋ฅผ ์ํด ์ํ์ข์ฐ๋ก ์ธ์ ํ ๊ฐ์ ์ ๋์ ์งํฉ์ ๊ทธ๋ฃน์ด๋ผ๊ณ ํ์.ย ์๋์ ํ์์๋ ํ์ ๊ทธ๋ฃน๊ณผ ๋ฐฑ์ ๊ทธ๋ฃน์ด ๊ฐ๊ฐ 3๊ฐ์ฉ ์กด์ฌํ๋ค.
Baduk2์์๋ ์ผ๋ฐ์ ์ธ ๋ฐ๋๊ณผ ๋์ผํ๊ฒ ์์ ์ ๋๋ก ์๋๋ฐฉ์ ๊ทธ๋ฃน์ ๋นํ์์ด ์์์ธ๋ฉด ๊ฐํ ๋์ ์ฃฝ์ผ ์ ์๋ค. ์ด๋ ๊ทธ๋ฃน์ด ๋นํ์์ด ์์์ธ์๋ค๋ ๊ฒ์ ๊ทธ ๊ทธ๋ฃน ๋ด์ ๋น ์นธ๊ณผ ์ธ์ ํด์๋ ๋์ด ํ๋๋ ์๋ค๋ ๊ฒ๊ณผ ๋์น์ด๋ค.
๊ทธ๋ฆฌ๊ณ Baduk2์์๋ ๋ชจ๋ ๋น์ด์๋ ์นธ์ย ๋์ ๋ ์ ์๋ค. ์ค๋ น ์๋ ๋๋ก ๋๋ฌ์ธ์ฌ ์์ด ์ค์ค๋ก ์กํ๋ ๊ณณ์ด๋ผ๊ณ ํ๋๋ผ๋ ์๊ด์ด ์๋ค. ์๋์ ๊ฐ์ ์ํฉ์ ์๊ฐํด๋ณด์.
๋ ๋นจ๊ฐ ์นธ ๋ชจ๋ ๋ฐฑ์ ์ ์ฅ์์ ์ฐฉ์ํ ๊ฒฝ์ฐ ์ฐ๊ฒฐ๋ ๊ทธ๋ฃน์ดย ํ๋๋ก ๋๋ฌ์ธ์ด๊ฒ ๋์ดย ์๋ ๋ฐ๋์ ๊ท์น์์๋ ๋ฐฑ์ ์ ์ฅ์์ ์ค์ค๋ก ์กํ๋ ๊ณณ์ด์ง๋ง Baduk2์์๋ ์ด์ ๋ฌด๊ดํ๊ฒ ๋ฐฑ์ด ๋นจ๊ฐ ์นธ ๋ ๊ณณ์ ์ฐฉ์ํด 8๊ฐ์ ํ๋์ด ๋ค์ด์๋ ๊ทธ๋ฃน์ ๋์ ์ฃฝ์ผ ์ ์๋ค. ์ ํญ๊ตฐ์ AI์๊ฒย Baduk2๋ก ๋์ ์ฅ์ ๋ด๋ฐ์๊ณ AI๋ ์์ธ๋ก ์์ํ ๋์ ์ ๋ฐ์๋ค์๋ค. ์ด์ ์ ํญ๊ตฐ์ 2116๋ 3์ 9์ผ, ์ธ๋ฅ์ ์์กด์ฌ์ ๊ฑด Baduk2 ๋๊ฒฐ์ ์์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์๊ฒ ์ธ๋ฅ์ ์น๋ฆฌ๋ฅผ ๋๊ธฐ ์ํด ํ์ฌ ํ ์์์ ๋ 2๊ฐ๋ฅผ ๋์ด ์๋ ๋์ ์ต๋ํ ๋ง์ด ์ฃฝ์ด๊ฒ๋ ํ๋ย ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ์๋ฌด๊ฐ ์ฃผ์ด์ก๋ค. ์ธ๋ฅ์ ๋ช ์๋ฅผ ๊ฑธ๊ณ ํ์ฌ ํ์ด ์ฃผ์ด์ง ๋ ๋ 2๊ฐ๋ฅผ ๋์ด ์ฃฝ์ผ ์ ์๋ ์๋ ๋์ ์ต๋ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฐ๋ํ์ ํ์ ๊ฐฏ์์ ์ด์ ๊ฐฏ์๋ฅผ ๋ํ๋ด๋ N(3 โค N โค 20)๊ณผ M(3 โค M โค 20)์ด ํ ์นธ์ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ N๊ฐ์ ์ค์๋ ๊ฐ ์ค๋ง๋ค ๋ฐฐ์ด์ ๊ฐ ํ์ ๋ํ๋ด๋ M๊ฐ์ ์ ์๊ฐ ํ ๊ฐ์ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. ๊ฐ ์นธ์ ๋ค์ด๊ฐ๋ ๊ฐ์ 0, 1, 2์ด๋ค. 0์ ๋น ์นธ, 1์ ๋์ ๋, 2๋ ์๋์ ๋์ ์๋ฏธํ๋ค. ๋น ์นธ์ด 2๊ฐ ์ด์ ์กด์ฌํจ๊ณผ ํ์ฌ ๋ฐ๋ํ์์ ์ ํ๋ ์ด์ดย ๋ชจ๋ ์๋๋ฐฉ์ ๋๋ก ๋นํ์์ด ์์์ธ์ธ ๊ทธ๋ฃน์ดย ์์์ด ๋ชจ๋ ๋ณด์ฅ๋๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ย ํ์ฌ ํ์์ย ๋ 2๊ฐ๋ฅผ ๋์ด ์ฃฝ์ผ ์ ์๋ ์๋ ๋์ ์ต๋ ๊ฐฏ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
3 4
2 0 0 0
0 0 0 0
0 0 0 2
์ถ๋ ฅ
1
์์ 2
์ ๋ ฅ
5 4
0 0 0 0
0 2 2 0
0 2 0 0
2 2 0 0
2 2 0 0
์ถ๋ ฅ
0
์์ 3
์ ๋ ฅ
8 4
0 0 2 0
0 1 2 2
0 0 1 1
2 0 0 0
0 1 0 0
2 0 1 0
2 0 0 0
0 0 0 0
์ถ๋ ฅ
3
์์ 4
์ ๋ ฅ
3 3
2 2 2
2 2 2
0 2 0
์ถ๋ ฅ
7
์์ 5
์ ๋ ฅ
8 6
0 0 1 2 2 2
0 0 1 2 2 2
0 1 1 0 2 2
1 2 2 0 1 1
1 2 2 1 0 0
1 2 1 0 2 0
1 1 0 0 0 1
0 1 0 0 0 0
์ถ๋ ฅ
13
์์ 6
์ ๋ ฅ
7 7
0 0 0 0 1 0 0
2 0 1 1 2 1 0
2 1 2 0 2 2 1
2 1 2 2 0 1 0
2 1 2 1 0 0 0
2 1 2 1 0 0 0
2 2 1 0 0 0 0
์ถ๋ ฅ
8
์์ 7
์ ๋ ฅ
7 5
0 0 1 1 1
0 1 2 2 2
2 1 2 1 1
2 1 2 0 2
0 1 2 0 1
0 1 2 2 2
0 0 1 1 1
์ถ๋ ฅ
10
My Sol
from itertools import combinations
from collections import deque
def check_around(i, j):
global I, J, origin_mat
for di in range(-1, 2):
for dj in range(-1, 2):
si, sj = i+di, j+dj
if not (0<=si<I and 0<=sj<J): continue
if origin_mat[si][sj]==2: return 1
return 0
def main(mat, tu1, tu2):
global I, J, origin_mat
now_cnt = 0
Q = set()
for ti, tj in (tu1, tu2):
mat[ti][tj] = 1
for ti, tj in (tu1, tu2):
for di, dj in ((-1,0),(1,0),(0,1),(0,-1)):
si, sj = ti+di, tj+dj
if not (0<=si<I and 0<=sj<J): continue
if mat[si][sj]==2:
Q.add((si, sj))
while Q:
i, j = Q.pop()
ret = check2(i, j)
now_cnt += ret
return now_cnt
def check2(i, j):
global I, J, check, new_mat
Q = deque([(i, j)])
ret, pos = 0, 1
while Q:
ti, tj = Q.popleft()
if check[ti][tj]: continue
check[ti][tj] = 1
ret += 1
for di, dj in ((-1,0),(1,0),(0,1),(0,-1)):
si, sj = ti+di, tj+dj
if not (0<=si<I and 0<=sj<J): continue
sv = new_mat[si][sj]
if not sv: pos = 0
if sv == 1: continue
elif sv == 2:
if check[si][sj]: continue
Q.append((si, sj))
return ret if pos else 0
I, J = map(int, input().split())
origin_mat = [list(map(int, input().split())) for _ in range(I)]
blanks = []
for i in range(I):
for j in range(J):
if origin_mat[i][j]: continue
if check_around(i, j): blanks.append((i, j))
maxx = 0
for tu1, tu2 in combinations(blanks, 2):
check = [[0]*J for _ in range(I)]
new_mat = [l[:] for l in origin_mat]
ret = main(new_mat, tu1, tu2)
if maxx < ret: maxx = ret
print(maxx)
์ ๋ ฅ์ ํฌ๊ธฐ๊ฐ ์ต๋ 20X20์ผ๋ก ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ์ฒดํฌํ๋ ๋ธ๋ฃจํธํฌ์ค๊ฐ ๊ฐ๋ฅํ๋ค.
- ํ๋ฐฉ ์ค 2๊ฐ ์๋ ๋น์นธ์
blanks
์ ๋ชจ์๋ค. - blanks ๋ด์ ์ขํ๋ค ์ค 2๊ฐ๋ฅผ ์ฎ์ด ๋ง๋ค ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ combinations ํจ์๋ฅผ ์ฌ์ฉํด ๋ฐ๋ณตํ๋ค.
- ๊ฐ ๋ฐ๋ณต๋ง๋ค mat์ ๋ณต์ฌ๋ณธ์ธ new_mat๊ณผ ํจ๊ป
main
ํจ์์ ์ ๋ฌํ๋ค. main
ํจ์๋ 2๊ฐ์ ์ขํ์ 1์ ์ฒ๋ฆฌํ๊ณ , ํด๋น ๋ ์ขํ์ ์ฌ๋ฐฉ์ ์๋ 2์ ๋ํ์ฌcheck2
BFS ํจ์๋ฅผ ์คํํ์ฌ ๋์ ํ๋ค.check2
ํจ์๋ ์ฒ์ ์ ๋ ฅ๋ 2๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฐฉ์ ์ฐ๊ฒฐ๋ 2๋ค์ ๋ชจ๋ ์ฒดํฌํ์ฌ 1 ๋๋ ๋ฐ๊นฅ ์์ญ์ผ๋ก ๋๋ฌ์์๋์ง ์ฒดํฌํ๋ค. ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด ์ฐ๊ฒฐ๋ ๋ชจ๋ 2์ ๊ฐ์๋ฅผ ๋ฐํํ๋ค.- ์ด ์ ๊ฑฐ ๊ฐ๋ฅํ 2์ ๊ฐ์๋ฅผ
main
ํจ์์์ ๋์ ํด์ ์ด๋ฅผ ๋ฐํํ๋ค. - global์์๋ main ํจ์์ ๋ฐํ๊ฐ์
maxx
์ ๋น๊ตํด์ ์ต๋๊ฐ์ ๊ฐฑ์ ํ๋ค. maxx
๋ฅผ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋ชจ๋ฒ๋ต์
# empty
๋๊ธ๋จ๊ธฐ๊ธฐ