[SWEA] 1974. 스도쿠 검증
https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=1&problemLevel=2&contestProbId=AV5Psz16AYEDFAUq&categoryId=AV5Psz16AYEDFAUq&categoryType=CODE&problemTitle=&orderBy=RECOMMEND_COUNT&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=2
- 문제 접근
- 문법 :
1) 2차원 배열 선언puzzle=[[0]*9 for _ in range(9)]
for i in range(9):
puzzle[i]=list(map(int, input().split()))
puzzle=[list(map(int, input().split())) for _ in range(9)]
2) 배열의 row에 list 형식으로 넣기puzzle[i]=list(map(int, input().split()))
3) set(집합) 선언 + 집합 개수까지 구하기
=> 중복되는 수가 있나 없나 검증 가능(9개면 중복되는 수가 없는 것)len(set(col)) != 9
- 예외상황을 발생시킬 수도 있는 경우의 수를 잘 고민해 보아야한다..!
- 내 코드
T = int(input())
for t in range(T):
puzzle=[[0]*9 for _ in range(9)]
for i in range(9):
puzzle[i]=list(map(int, input().split()))
for i in range(9):
row = len(set(puzzle[i]))
if row != 9:
break
for i in range(9):
col = []
for j in range(9):
col.append(puzzle[j][i])
if len(set(col)) != 9:
break
for i in range(0,9,3):
square = []
for j in range(0,9,3):
square.append(puzzle[i][j])
square.append(puzzle[i][j+1])
square.append(puzzle[i][j+2])
square.append(puzzle[i+1][j])
square.append(puzzle[i + 1][j + 1])
square.append(puzzle[i + 1][j + 2])
square.append(puzzle[i+2][j])
square.append(puzzle[i + 2][j + 1])
square.append(puzzle[i + 2][j + 2])
if len(set(square)) != 9:
break
if len(set(square)) != 9:
break
if row != 9 or len(set(col)) != 9 or len(set(square)) != 9:
print("#{} {}".format(t + 1, 0))
else:
print("#{} {}".format(t + 1, 1))
- 더 멋진 코드
T = int(input())
for tc in range(1, T+1):
arr = [list(map(int, input().split())) for _ in range(9)]
result = 1
for i in range(9):
cnt_r = [0] * 10
cnt_c = [0] * 10
for j in range(9):
cnt_r[arr[i][j]] += 1
cnt_c[arr[j][i]] += 1
for k in range(1, 10):
if cnt_r[k] != 1:
result = 0
break
if cnt_c[k] != 1:
result = 0
break
for i in range(3):
for j in range(3):
cnt_x = [0] * 10
for k in range(3):
for l in range(3):
cnt_x[arr[3*i+k][3*j+l]] += 1
for k in range(1, 10):
if cnt_x[k] != 1:
result = 0
break
print("#{} {}".format(tc, result))