스토쿠를 검증하는 문제로 가로, 세로 3*3 크기의 각 합이 1~9까지 다 더한 45면 참이다 라고 처음 생각했다.
# import sys
# sys.stdin = open("input/1974_input.txt")vv
t = int(input())
for cnt in range(1, t + 1):
arr = [list(map(int, input().split())) for _ in range(9)]
# 가로 검사
for i in range(9):
temp = 0
temp = sum(arr[i])
if temp != 45:
break
if temp != 45:
print(f"#{cnt} 0")
continue
# 세로 검사
for i in range(9):
temp = 0
for j in range(9):
temp += arr[j][i]
if temp != 45:
break
if temp != 45:
print(f"#{cnt} 0")
continue
# 3*3 cheak
if cnt % 3 == 1:
temp = 0
for i in range(cnt - 1, cnt + 2):
for j in range(cnt - 1, cnt + 2):
temp += arr[i][j]
if temp != 45:
break
if temp != 45:
print(f"#{cnt} 0")
continue
else:
print(f"#{cnt} 1")
이렇게 풀었는데 계속 오류가 떠서 생각해보니
내 알고리즘상 무작위 숫자를 넣어서 45만 되면 pass가 되기 때문에 잘 못된 풀이였다.
그래서 가로, 세로, 3x3 안에 각 요소의 수가 2개 이상이면 0출력 아니면 통과하는 식으로 다시 풀어야 겠다고 생각했다.
import sys
sys.stdin = open("input/1974_input.txt")
t = int(input())
for cnt in range(1, t + 1):
arr = [list(map(int, input().split())) for _ in range(9)]
state = 1
# 가로 검사
for i in range(1, 10, 1):
for j in range(1, 10, 1):
if arr[i - 1].count(j) >= 2:
state = 0
break
if state == 0:
break
# 세로 검사
for i in range(9):
temp = []
for j in range(9):
temp.append(arr[j][i])
for k in range(1, 10):
if temp.count(k) >= 2:
state = 0
break
if state == 0:
break
# 3*3 check
for _ in range(0, 9, 3):
temp = []
for a in range(3):
for b in range(3):
temp.append(arr[a][b])
for k in range(1, 10):
if temp.count(k) >= 2:
state = 0
break
if state == 0:
print(f"#{cnt} 0")
else:
print(f"#{cnt} 1")
합이 아닌 가로줄, 세로줄 3*3 의 값을 배열로 받아 count를 해 2개 이상이면 F 아니면 T로 해결했다.