import sys
input = sys.stdin.readline
arr = []
for _ in range(9):
arr.append(list(map(int, input().rstrip())))
row = [[0]*10 for _ in range(10)]
col = [[0]*10 for _ in range(10)]
box = [[0]*10 for _ in range(10)]
for i in range(9):
for j in range(9):
n = arr[i][j]
row[i][n] = 1
col[j][n] = 1
box[i//3+j//3*3][n] = 1
def solve(cnt):
if (cnt==81):
for i in range(9):
for j in range(9):
print(arr[i][j], end='')
print()
exit(0)
y = cnt//9
x = cnt%9
if (arr[y][x]==0):
for n in range(1, 10):
if (row[y][n]==0 and col[x][n]==0 and box[y//3+x//3*3][n]==0):
row[y][n]=1
col[x][n]=1
box[y//3+x//3*3][n]=1
arr[y][x] = n
solve(cnt+1)
row[y][n]=0
col[x][n]=0
box[y//3+x//3*3][n]=0
arr[y][x] = 0
else:
solve(cnt+1)
solve(0)
https://www.acmicpc.net/problem/2239
지금 예상치 못한.. 요상한 에러가 계속 나서 머리에 열이 오를대로 오른 상태이다..
col = [[0]*10]*10 이렇게 배열을 선언했더니 하나의 원소를 바꿨을 때 그게 모든 열에 적용이 되었다.
row = [[0]*10 for _ in range(10)] 이 방식으로 선언하면 괜찮은데... 앞으로 저 방식으로는 절대 사용하면 안되겠다. 정말 이거때매 머리를 몇 번을 쥐어뜯었는지 모르겠다.
2580번 스도쿠 문제와 완전히 같은 문제이다. 그런데 중간에 이상한 실수를 너무 많이 했다. 위에서 말했던 것도 이미 이문제를 풀 때 한 번 겪었던 실수인데 또 반복했고, = 을 == 으로 쓴 걸 못보고 또 머리를 쥐어뜯었다. 이렇게 멍청할 수가...
'알고리즘💻 > Bruteforce&Backtracking' 카테고리의 다른 글
BOJ 15811번: 복면산?! (0) | 2021.07.28 |
---|---|
BOJ 2026번: 소풍 (0) | 2021.07.27 |
BOJ 1182번: 부분수열의 합 (0) | 2021.07.25 |
BOJ 14889번: 스타트와 링크 (0) | 2021.07.25 |
BOJ 2993번: 세 부분 (0) | 2021.07.11 |