알고리즘/SWEA
[SWEA] 1974. 스도쿠검증
빙빙
2021. 2. 20. 15:37
이 문제는 쉬운듯했는데 내가 못풀어서그런지 엄청 오래걸렸다.
스도쿠를 잘못 이해해서 힘들었다..ㅠㅠ
가로 세로 모두 다 1부터 9까지 있는지 확인한다. 만약 한 열이나 행이라도 1부터 9까지 존재하지 않는다면 스도쿠가 아니다.
그리고 3x3의 사각형에 1부터 9까지 존재하는지 확인하고 존재한다면 1로 출력하는 문제이다.
T = int(input())
check = [1,2,3,4,5,6,7,8,9] #스도쿠 검증 리스트
for tc in range(1,T+1):
arr = []
row_cnt = [0] * 9
for i in range(9):
temp = []
temp = list(map(int,input().split()))
if sorted(temp) == check:
row_cnt[i] = 1 #행에 스도쿠 가능한지 확인
arr.append(temp)
#print(arr) #배열 잘 받았는지 확인
#print(row_cnt)
col_cnt = [0]*9
for j in range(9): #열 중심
temp1 = 0
for i in range(9):
temp1 += arr[i][j]
if temp1 == 45:
col_cnt[j] = 1
#print(col_cnt)
sum1 = 0
squre_cnt = [0] * 9
a = 0
b = 0
cnt = 0
for i in range(a,9,a+3):
for j in range(b,9,b+3): #정사각형
for x in range(i,i+3):
for y in range(j,j+3):
sum1 += arr[x][y]
if sum1 == 45:
squre_cnt[cnt] = 1
cnt += 1
#print(squre_cnt)
result = 0
for i in range(9): #row_cnt, col_cnt 안에 있는 리스트 요소들이 모두 다 1이어야 하므로 더해서 18일때만 사각형안의 조건을 봐준다
if sum(row_cnt) + sum(col_cnt) == 18 and squre_cnt[i] == 1:
result = 1
print('#{} {}'.format(tc, result))