https://www.acmicpc.net/problem/9291
알고리즘
스도쿠를 풀때처럼 단순하게
- 한 열에 대해서 1~9 확인
- 한 행에 대해서 1~9 확인
- 3*3 정사각형에 대해서 1~9 확인
일련의 3가지 과정을 거친후 모든조건에 맞다면 스도쿠의 올바른 답인것을 확인 할 수 있다.
코드
import sys
input = sys.stdin.readline
t = int(input())
for case in range(1,t+1):
arr = []
for _ in range(9):
arr.append(list(map(int,input().split())))
flag = True
#check row
for i in range(9):
checked = [False]*9
for j in range(9):
checked[arr[i][j]-1] = True
if False in checked:
flag = False
break
#check col
if flag:
for i in range(9):
checked = [False] * 9
for j in range(9):
checked[arr[j][i] - 1] = True
if False in checked:
flag = False
break
#check 3*3
if flag:
for i in range(3):
for j in range(3):
checked = [False] * 9
for k in range(3):
for l in range(3):
checked[arr[i*3+k][j*3+l]-1] = True
if False in checked:
flag = False
if flag:
print(f"Case {case}: CORRECT")
else:
print(f"Case {case}: INCORRECT")
#get empty
if case < t:
input()
각각의 경우에 대해 checked 배열을 이용하여 1~9를 카운팅해주고 해당 배열에 False가 존재한다면 1~9가 각각 1개씩 존재하지 않게 되므로 False처리를 해주면 된다.
최대한 시간을 줄이기 위해 col, 3*3 확인과정에서 flag가 False라면 이미 올바르지 않은 스도쿠이므로 건너뛰도록 한다.
'Koala - 17기 > 코딩테스트 심화 스터디' 카테고리의 다른 글
[백준/Python] 14888번 : 연산자 끼워넣기 (0) | 2025.01.12 |
---|---|
[백준/Python] 20950번 : 미술가 미미 (0) | 2025.01.12 |
[백준/Python] 1895번 : 필터 (0) | 2025.01.12 |
[백준/Python]15654번 : N과 M (5) (0) | 2025.01.11 |
[백준/C++] 1895번: 필터 (0) | 2025.01.10 |