22352๋ฒ - ํญ์ฒด ์ธ์
๊ทธ๋ํ๊ฐ ๋ ๊ฐ ์ฃผ์ด์ง๋๋ค (ํญ์ฒด๋ฅผ ๋๊ธฐ ์ , ํญ์ฒด๋ฅผ ๋์ ํ)
์ ํฌ๋ ์ด ๋ ๊ฐ์ ๊ทธ๋ํ๋ฅผ ๋ณด๊ณ ๋์ ํญ์ฒด๊ฐ CPCU-1202 ๋ฐฑ์ ์ธ์ง ์๋์ง๋ฅผ ํ๋ณํ๋ฉด ๋ฉ๋๋ค.
CPCU-1202๋ ํฌ์ฝํ๋ฉด ํ์ฌ ์ํด์๋ ๊ฐ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ์ ๊ฐ์ง๊ณ ์ํ์ข์ฐ์ ํด๋น ๊ฐ์ด ์์ ๊ฒฝ์ฐ, ๊ทธ ์นธ์ผ๋ก ํผ์ ธ๋๊ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ต์ข ์ ์ผ๋ก ๋ ํผ์ ธ๋๊ฐ ๊ณต๊ฐ์ด ์๋ค๋ฉด ํน์ ํ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
N,M = map(int,input().split())
before = []
after = []
que = deque()
๋จผ์ ์
๋ ฅ์ ๋ฐ์์ฃผ๊ฒ ์ต๋๋ค.
ํญ์ฒด ํฌ์ฝ์ before, ํญ์ฒด ํฌ์ฝ ํ after ๊ทธ๋ํ๋ก ์
๋ ฅ๋ฐ๊ฒ ์ต๋๋ค.
for _ in range(N):
before.append(list(map(int,input().split())))
for _ in range(N):
after.append(list(map(int,input().split())))
๋ฐ๋ณตํด์ ์ด ๋ ๋ฒ ๋ฐ์์ค๋๋ค.
์ ๊ฐ ์๊ฐํ ํด๋น ๋ฌธ์ ์ ๋ก์ง์ ์ด๋ ์ต๋๋ค.
์ผ๋จ ํญ์ฒด๋ฅผ ํฌ์ฝํ๊ธฐ ์ ๊ณผ ํฌ์ฝํ ํ์ ๊ทธ๋ํ์์ ๋ณํํ ๊ตฌ๊ฐ์ ์ฐพ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ์ธ๋ฑ์ค๋ฅผ ๋์ถํด์ ํฌ์ฝํ ํ์ ํด๋น ์ธ๋ฑ์ค๋ฅผ ํฌ์ฝ ์ ์ ํด๋น ์ธ๋ฑ์ค์ ๋์
ํ๊ณ
๋์ด ๋น๊ตํด์ ๊ทธ๋ํ๊ฐ ์ผ์นํ๋ฉด CPCU-1202, ์๋๋ผ๋ฉด ๋ค๋ฅธ ํญ์ฒด๊ฐ ํฌ์
๋ ๊ฒ๋๋ค.
changed = []
loaded = False
for i in range(N):
for j in range(M):
if before[i][j] != after[i][j]:
if after[i][j] not in changed:
๋ฐ๋ผ์ ํฌ์ฝ ์ ๊ณผ ํฌ์ฝ ํ์ ๋ณํํ ๊ตฌ๊ฐ์ ์ฐพ๊ณ ๋ง์ฝ ๋ณํํ ๊ตฌ๊ฐ ํ์์ ์๊ฐ์ผ๋ฉด
loaded = True
before_changed = before[i][j]
changed.append(after[i][j])
bfs(i,j)
break
๋ณํํ ๊ตฌ๊ฐ์์ ๋ฐ๋๊ธฐ ์ value๋ before_changed์, ๋ฐ๋ ํ์ value๋ changed์ ๋ฃ๊ณ ํด๋น ์ธ๋ฑ์ค๋ฅผ BFS ํ์ํ๊ฒ ์ต๋๋ค.
if loaded:
break
loaded๋ก True/False ์ฒดํฌ๋ฅผ ์ํด์ฃผ๊ฒ ๋๋ฉด ํ ๋ฒ๋ง ๋์๋ ๋๋ BFS ํ์์ ๋ ๋ฒ ์ธ ๋ฒ ๋์ ๊ฐ์ด ์ค์ผ๋ ์ ์์ต๋๋ค.
๊ธฐ์ค์ ์ before ๊ทธ๋ํ์
๋๋ค.
์์ ๋ง์๋๋ ธ๋ค์ํผ
after ๊ทธ๋ํ์ ๋ณํ๋ ๊ตฌ๊ฐ์ value๋ฅผ before ๊ทธ๋ํ์ ๋ณํ๋ ๊ตฌ๊ฐ์ ๋์
ํ ๊ฐ
<=>
after ๊ทธ๋ํ
์ ๋น๊ตํ์ ๋ ์ผ์นํด์ผ CPCU-1202๋ฅผ ํฌ์ฝํ๋ค๊ณ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
from collections import deque
dx = [-1,1,0,0]
dy = [0,0,1,-1]
BFS ์ฌ์ฉ์ ์ํด ์ํ์ข์ฐ ์ค์ ๊ณผ que๋ฅผ ๋ถ๋ฌ์์ฃผ๊ณ
def bfs(x,y):
global before_changed
boolean = False
que.append([x,y])
que์ ์ถ๊ฐํ๋ฉด์ ํ์์ ์์ํฉ๋๋ค.
while que:
x,y = que.popleft()
for i in range(4):
nx = dx[i] + x
ny = dy[i] + y
if nx<0 or ny<0 or nx>=N or ny>=M:
continue
ํญ์ ํ๋ 4๋ฐฉํฅ ํ์์ ์ค์ํด์ฃผ๋
if before[nx][ny] == before_changed:
boolean = True
before[nx][ny] = changed[0]
que.append([nx,ny])
๋ง์ฝ ํ์๊ตฌ๊ฐ์ด ๋ณํ๋ ๊ตฌ๊ฐ์ด๋ผ๋ฉด after ๊ทธ๋ํ์์ ๋ณํ๋ ๊ฐ์ before ๊ทธ๋ํ์ ๋ณํ๊ตฌ๊ฐ์ ๋์ ํด์ฃผ๋๋ก ํฉ์๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ๊ตฌ๊ฐ์ que์ ์ถ๊ฐ์์ผ์ ์ฃผ๋ณ ํ์์ ์ฌ์ค์ํฉ๋๋ค.
if boolean == False:
before[x][y] = changed[0]
์ถ๊ฐ์ ์ผ๋ก ํ์์ด ์์ ์คํ๋์ง ์์๋ค๋ฉด ํญ์ฒด๊ฐ ํผ์ง ๊ณต๊ฐ์ด ์กด์ฌํ์ง ์์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ํด๋น ์์น๋ง ๋ณํ๋ ๊ฐ์ ๋์ ํด์ฃผ๋๋ก ํฉ์๋ค.
if before == after:
print('YES')
else:
print('NO')
๋ง์ง๋ง์ผ๋ก ๊ทธ๋ํ๊ฐ ์ผ์นํ๋ฉด YES, ์๋๋ผ๋ฉด NO๋ฅผ ์ถ๋ ฅ์ํค๋ฉด ํด๊ฒฐํ ์ ์์ต๋๋ค.