여름의 서재
[SWEA] 1974_스도쿠 검증 본문
728x90
📕 문제
스도쿠는 숫자퍼즐로, 가로 9칸 세로 9칸으로 이루어져 있는 표에 1 부터 9 까지의 숫자를 채워넣는 퍼즐이다.
같은 줄에 1 에서 9 까지의 숫자를 한번씩만 넣고, 3 x 3 크기의 작은 격자 또한, 1 에서 9 까지의 숫자가 겹치지 않아야 한다.
입력으로 9 X 9 크기의 스도쿠 퍼즐의 숫자들이 주어졌을 때, 위와 같이 겹치는 숫자가 없을 경우, 1을 정답으로 출력하고 그렇지 않을 경우 0 을 출력한다.
[제약 사항]
1. 퍼즐은 모두 숫자로 채워진 상태로 주어진다.
2. 입력으로 주어지는 퍼즐의 모든 숫자는 1 이상 9 이하의 정수이다.
[입력]
입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.
다음 줄부터 각 테스트 케이스가 주어진다.
테스트 케이스는 9 x 9 크기의 퍼즐의 데이터이다.
[출력]
테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
def sudoku():
for i in range(9):
row_list = []
col_list = []
for j in range(9):
if matrix[i][j] in row_list:
return 0
else:
row_list.append(matrix[i][j])
if matrix[j][i] in col_list:
return 0
else:
col_list.append(matrix[j][i])
if i % 3 == 0 and j % 3 == 0:
square_list = []
for r in range(i, i + 3):
for c in range(j, j + 3):
if matrix[r][c] in square_list:
return 0
else:
square_list.append(matrix[r][c])
return 1
T = int(input())
for tc in range(1, T + 1):
matrix = [list(map(int, input().split())) for _ in range(9)]
print('#{} {}'.format(tc, sudoku()))
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA] 4408_자기 방으로 돌아가기 (0) | 2021.08.20 |
---|---|
[SWEA] 1979_어디에 단어가 들어갈 수 있을까 (0) | 2021.08.20 |
[SWEA] 1961_숫자 배열 회전 (0) | 2021.08.20 |
[SWEA] 1859_백만 장자 프로젝트 (0) | 2021.08.20 |
[SWEA] 4871_그래프 경로 (DFS 이용) (0) | 2021.08.19 |
Comments