1974. 스도쿠 검증
✏️ 문제 풀이
- seen 리스트 생성 → 0~9까지의 인덱스를 가지며 초기값은 모두 False로 초기
- seen 리스트에서 현재 숫자(value)의 인덱스 확인 → 값이 True라면, 이전에 같은 숫자가 이미 발견되었음을 의미하므로 0 반환
- 모든 열을 체크한 후에도 중복된 숫자가 발견되지 않으면 1 반환
- 3 x 3 검증은 0부터 8까지의 숫자를 3씩 증가시키며 반복해서 검증
def is_row_valid(sudoku):
# 가로줄 검증 함수
for row in range(9):
seen = [False] * 10 # 1~9 숫자별 방문 여부 확인. 0번째 인덱스는 사용하지 않음.
for col in range(9):
value = sudoku[row][col]
if seen[value]: # 이미 방문한 숫자일 경우
return 0
else:
seen[value] = True # 숫자 방문 표시
return 1
def is_col_valid(sudoku):
# 세로줄 검증 함수
for col in range(9):
seen = [False] * 10 # 1~9 숫자별 방문 여부 확인.
for row in range(9):
value = sudoku[row][col]
if seen[value]: # 이미 방문한 숫자일 경우
return 0
else:
seen[value] = True # 숫자 방문 표시
return 1
def is_square_valid(sudoku):
# 3x3 사각형 검증 함수
for row_start in range(0, 9, 3):
for col_start in range(0, 9, 3):
seen = [False] * 10 # 1~9 숫자별 방문 여부 확인.
for i in range(3):
for j in range(3):
value = sudoku[row_start + i][col_start + j]
if seen[value]: # 이미 방문한 숫자일 경우
return 0
else:
seen[value] = True # 숫자 방문 표시
return 1
T = int(input())
for tc in range(1, T + 1):
sudoku = [list(map(int, input().split())) for _ in range(9)] # 9x9 스도쿠 입력
row_checked = is_row_valid(sudoku)
col_checked = is_col_valid(sudoku)
square_checked = is_square_valid(sudoku)
if (row_checked == 0 or col_checked == 0 or square_checked == 0):
answer = 0
else:
answer = 1
print(f"#{tc} {answer}")
'코딩테스트 > SW Expert Academy' 카테고리의 다른 글
[D2] 1284. 수도 요금 경쟁 (0) | 2024.10.06 |
---|---|
[D2] 2007. 패턴 마디의 길이 (0) | 2024.10.06 |
[D2] 1204. 최빈수 구하기 (0) | 2024.09.29 |
[D2] 1859. 백만 장자 프로젝트 (0) | 2024.09.29 |
[D2] 2005. 파스칼의 삼각형 (0) | 2024.09.29 |