π λ¬Έμ νμνκΈ°
μ λ ₯μΌλ‘ μ£Όμ΄μ§ μ€λͺ© νμ μνλ₯Ό νμΈνκ³ , κ²μμ(1)μ΄ μ΄κ²Όμ κ²½μ°μλ 1μ μΆλ ₯νκ³ , ν°μ(2)μ΄ μ΄κ²Όμ κ²½μ°μλ 2λ₯Ό μΆλ ₯νλ€. μμ§ λ¬΄μΉλΆλΌλ©΄ 0μ μΆλ ₯νλ€. λν 1, 2λ₯Ό μΆλ ₯νλ€λ©΄, κ°μ₯ μΌμͺ½μ μλ λ°λμμ μ’νλ₯Ό μΆλ ₯ν΄μΌνλ€.
π λ¬Έμ 쑰건
- κ²μ λ°λμ λλ ν°μ λ°λμμ΄ 5κ° λμ¬ μ€λͺ©μΌλ, ν΄λΉ μμμ μΆλ ₯νκ³ , μλ¨ μ’νλ₯Ό μΆλ ₯ν΄μΌνλ€.
- κ°μ₯ μΌμͺ½μ μλ μ’νλ₯Ό μΆλ ₯ν΄μΌνλ―λ‘ β λ°©ν₯μΌλ‘ μ€λͺ©μ΄ μκΈΈλλ λ§μ§λ§μΌλ‘ νμν μ’νλ₯Ό μΆλ ₯ν΄μΌνλ€.
π μκ° λ³΅μ‘λ
- 19 x 19μ리μμ 4λ°©ν₯(β,↓,β,→ )μ λν΄ νμμ μ§ννλ―λ‘ μκ° μ ν 1μ΄ μμ ν΄κ²°ν μ μλ€.
π μ κ·Ό λ°©λ² λ° μκ³ λ¦¬μ¦
- β, ↓, β, → μμλλ‘ DFSλ₯Ό μ§ννλ€.
- μ¬μ― μ μ΄μμ΄ λμΈ κ²½μ°, μ΄κΈ΄ κ²μ΄ μλλ―λ‘ 6κ°μ λν νμμ μ§νν΄μΌνλ€.
π μ½λ μ€κ³νκΈ°
1οΈβ£ μ€λͺ©ν 21x21 λ°°μ΄μ 0μΌλ‘ μ΄κΈ°ννλ€. (μ’ν νΈλ¦¬λ₯Ό μν΄)
2οΈβ£ λ°©ν₯ 벑ν°λ₯Ό μ μνλ€. (β, ↓, β, →)
3οΈβ£ DFS: μ΄μ λμ μ’νκ° κ°μ μμ΄λ©΄ λ€μ μ’νλ‘
4οΈβ£ μ΄μ€ FORλ¬ΈμΌλ‘ λμ νμΈνλ€, λμ΄ μλ€λ©΄ 4λ°©ν₯μΌλ‘ DFS νμμ μ§ννλ€.
5οΈβ£ (DFSν¨μ) 첫 λμ μ΄μ μ’νκ° κ°μ μμ΄λ©΄, μ¬κ·ν¨μλ₯Ό ν΅ν΄ κ³μ μννλ€.
6οΈβ£ (DFSν¨μ) cnt == 5μΈ κ²½μ° μ λ΅ μ’νλ₯Ό ans X, ansYμ μ μ₯νλ€.
7οΈβ£ (DFSν¨μ) cnt == 6μ΄λ©΄ μ€λͺ©μ 무ν¨ννλ€.
8οΈβ£ νμμ΄ λλ νμλ μλ€λ©΄ 0μ μΆλ ₯νλ€.
π μλ νμ°¨ μμ μ¬ν
- μ€λͺ©μ μ°Ύλ ν¨μ λ΄λΆμ dx, dyλ₯Ό μννλ κ²μ λ£μΌλ©΄ μ§μ μ΄ λ μ μλ€. λ°λΌμ, λ°μΌλ‘ λΉΌλ΄μλ€.
π μ λ΅ μ½λ
import sys
# μ€λͺ©ν 21x21 μμ± (1~19 μ¬μ©)
omok = [[0] * 21 for _ in range(21)]
ansX, ansY = 0, 0
# λ°©ν₯ 벑ν°: β, ↓, β, →
dx = [1, 1, 1, 0]
dy = [-1, 0, 1, 1]
# DFSλ₯Ό μ΄μ©ν μ€λͺ© 체ν¬
def dfs(x, y, value, cnt, direction):
global ansX, ansY
# μ ν¨ν μ’νμΈμ§ νμΈνλ ν¨μ
def is_valid(tx, ty):
return 1 <= tx <= 19 and 1 <= ty <= 19
if cnt == 1:
prev_x, prev_y = x - dx[direction], y - dy[direction]
if is_valid(prev_x, prev_y) and omok[prev_x][prev_y] == value:
return False
tx, ty = x + dx[direction], y + dy[direction]
if cnt == 5:
ansX, ansY = x, y
if not is_valid(tx, ty) or omok[tx][ty] != value:
return True
else:
return False
if is_valid(tx, ty) and omok[tx][ty] == value:
return dfs(tx, ty, value, cnt + 1, direction)
return False
# μ€λͺ©ν μ
λ ₯λ°κΈ°
input = sys.stdin.read
data = input().split()
index = 0
for i in range(1, 20):
for j in range(1, 20):
omok[i][j] = int(data[index])
index += 1
# μ€λͺ© νμ
for i in range(1, 20):
for j in range(1, 20):
if omok[i][j] != 0:
for k in range(4):
if dfs(i, j, omok[i][j], 1, k):
if k == 0: # β λ°©ν₯μΌ λ
print(omok[i][j])
print(ansX, ansY)
else:
print(omok[i][j])
print(i, j)
sys.exit()
print(0)