ν°μ€ν 리 λ·°
728x90
λ°μν
λ¬Έμ
λ¬Έμ νμ΄
κ°λ‘, μΈλ‘μ 3 X 3 μμμ νμΈνμ¬ μ€λμΏ νΌμ¦μ μ±μμ§μ§ μμ μ«μ μ€ μλ§μ μ«μλ₯Ό μ±μ°λ λ¬Έμ μ΄λ€. μ±μμ§μ§ μλ κ³³μ 0μΌλ‘ μ μλλ€. λ°λΌμ 0μΈ λΆλΆμ μ’νλ₯Ό μ°Ύκ³ ν΄λΉ μ’νμ μ΄λ€ κ°μ λμ νλ©΄ λλμ§ νμΈνλ©΄ λλ€. νμΈνλ λ°©λ²μ λ€μκ³Ό κ°λ€.
- ν νμ μ΄λ€ κ°μ΄ μλμ§ νμΈνλ€.
-
ν μ΄μ μ΄λ€ κ°μ΄ μλμ§ νμΈνλ€.
- κ·Έλνμ ν/μ΄μ μ νμμΌ νμΈνλ©΄ μ½λ€.
- 3 X 3 μμμ μ΄λ€ κ°μ΄ μλμ§ νμΈνλ€.
μ½λ
from sys import stdin, exit
# 3 X 3 μμ νμΈ
def area_check(area, num):
x, y = map(lambda n: n // 3 * 3, area)
for i in range(3):
for j in range(3):
if num == x_graph[x + i][y + j]:
return False
return True
def dfs(cur_find):
if cur_find == len(zeros):
for nums in x_graph:
print(*nums)
exit(0)
for num in range(1, 10):
next_x, next_y = zeros[cur_find]
if row(next_x, num) and column(next_y, num) \
and area_check([next_x, next_y], num):
x_graph[next_x][next_y] = y_graph[next_y][next_x] = num
dfs(cur_find + 1)
x_graph[next_x][next_y] = y_graph[next_y][next_x] = 0
if __name__ == '__main__':
x_graph = [list(map(int, stdin.readline().split())) for _ in range(9)]
# ν/λ ¬ μ ν
y_graph = list(map(list, zip(*x_graph)))
zeros = [(i, j) for i in range(9) for j in range(9) if not x_graph[i][j]]
# νμ κ°μ΄ μλκ°?
row = lambda x, num: num not in x_graph[x]
# μ΄μ κ°μ΄ μλκ°?
column = lambda y, num: num not in y_graph[y]
dfs(0)
ν/μ΄μ νμΈνλ λΆλΆμ lamdaλ‘ μμ±νμκ³ , lamdaλ‘ μ½κ² μ²λ¦¬νκΈ° μν΄ κΈ°μ‘΄μ κ·Έλνμ ν/λ ¬μ λ°μ μμΌ°λ€. μ νλ κ°μ 체ν¬νκ³ ν΄μ ν λ, x_graph, y_graph λͺ¨λ μ§νν΄μ£Όμ΄μΌ λλ€.
728x90
λ°μν
'π¨βπ» μ½λ©ν μ€νΈ > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λ°±μ€: 1987 μνλ²³ (0) | 2020.08.06 |
---|---|
λ°±μ€: 16198 μλμ§ λͺ¨μΌκΈ° (0) | 2020.08.06 |
λ°±μ€: 16933 λ²½ λΆμκ³ μ΄λνκΈ° 3 (0) | 2020.08.04 |
λ°±μ€: 14442 λ²½ λΆμκ³ μ΄λνκΈ° 2 (0) | 2020.08.03 |
λ°±μ€: 2206 λ²½ λΆμκ³ μ΄λνκΈ° (0) | 2020.08.03 |
λκΈ
κΈ λ³΄κ΄ν¨
μ΅κ·Όμ μ¬λΌμ¨ κΈ
μ΅κ·Όμ λ¬λ¦° λκΈ